求dalao帮助,高精爆零(甚至有TLE)

P1601 A+B Problem(高精)

@[TheOldDriver](/space/show?uid=86657) 建议使用scanf读入字符串,因为数据里可能只有'\r',没有'\n'。
by StudyingFather @ 2018-12-10 22:20:29


(蒟蒻报道): 建议函数!!! 接下来代码: #include<bits/stdc++.h> using namespace std; const int maxN=501; void convert(string str,int num[]) { int len=str.size(); memset(num,0,sizeof(int)*maxN); for(int i=1; i<=len; i++) { num[i]=str[len-i]-'0'; } num[0]=len; } void output(int num[]) { for(int i=num[0]; i>=1; i--) { cout<<num[i]; } } void add(int a[],int b[],int c[]) { int lc; lc=a[0]; if(b[0]>lc) { memset(c,0,sizeof(int)*maxN); lc=b[0]; } for(int i=1; i<=lc; i++) { c[i]=c[i]+b[i]+a[i]; c[i+1]=c[i]/10; c[i]=c[i]%10; } if(c[lc+1]>0) { lc++; } c[0]=lc; } int main() { int a[maxN],b[maxN],c[maxN]; string as,bs; cin>>as>>bs; convert(as,a); convert(bs,b); add(a,b,c); output(c); return 0; } 不想打空格
by XChenNB @ 2018-12-11 20:19:27


@[juanxincai](/space/show?uid=128240) 希望更丰富的展现?使用Markdown
by 初墨 @ 2018-12-19 20:41:39


```cpp //B4P182 洛谷P1601 高精度+ #include<iostream> #include<cstring> using namespace std; int main(){ int a[505],b[505],c[505],x; char a1[100],b1[100]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>a1>>b1; a[0]=strlen(a1); b[0]=strlen(b1); for(int i=0;i<=a[0]-1;i++)a[a[0]-i]=a1[i]-48; for(int i=0;i<=b[0]-1;i++)b[b[0]-i]=b1[i]-48; c[0]=1; x=0; while(c[0]<=a[0]||c[0]<=b[0]){ c[c[0]]=a[c[0]]+b[c[0]]+x; x=c[c[0]]/10; c[c[0]]%=10; c[0]++; } c[c[0]]=x; if(x==0)c[0]--; for(int i=c[0];i>=1;i--){ cout<<c[i]; } cout<<endl; return 0; } ```
by wuhong_吴洪 @ 2019-01-27 18:58:56


第一位的代码看不懂。。 ``` #include <bits/stdc++.h> using namespace std; int a[505], b[505], c[1005]; char q[505]; void Add(int a[], int b[], int c[]) { if (a[0] == 0 && b[0] == 0) { c[0] == 0; return ; } int m = min(a[0], b[0]), m1 = max(a[0], b[0]); for (int i = 0; i < m; i++) c[i + 1] = a[a[0] - i] + b[b[0] - i]; if (a[0] > b[0]) for (int i = b[0] + 1; i <= a[0]; i++) c[i] = a[a[0] - i + 1]; else for (int i = a[0] + 1; i <= b[0]; i++) c[i] = b[b[0] - i + 1]; for (int i = 1; i <= m1; i++) if (c[i] >= 10) { c[i + 1] += c[i] / 10; c[i] %= 10; } c[0] = m1; if (c[m1 + 1] > 0) c[0] = m1 + 1; return ; } int main() { scanf("%s", q); a[0] = strlen(q); for (int i = 1; i <= a[0]; i++) a[i] = q[i - 1] - '0'; scanf("%s", q); b[0] = strlen(q); for (int i = 1; i <= b[0]; i++) b[i] = q[i - 1] - '0'; Add(a, b, c); for (int i = c[0]; i >= 1; i--) printf("%d", c[i]); if (c[0] == 0) printf("0"); return 0; } ```
by 时空之影 @ 2019-06-19 22:00:04


|