BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #93288同步于 2017/5/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

求讲解这个代码,看不太懂

crazyalltnt
2017/5/21镜像同步2 回复
前一阵问过这个题{如图),自己做出来结果是对的,但是oj不通过,联系到管理员求了一份已通过的代码(好像是管理自己写的),但是看不太懂,求个大佬讲解一下,光 Read 函数就看得很迷 #include <cstdio> #include <cstring> #include <iostream> using namespace std; int read(int a[], string c){ //scanf("%s",c); int n=1,len=(c).size(),k=1; for(int i=0;i<len;i++){ if(k==10000){ k=1; n++; } a[n]+=k*(c[len-i-1]-'0'); k*=10; } a[0]=n; } void multx(int a[],int b[],int c[]){ for(int i=1;i<=a[0];i++) for(int j=1;j<=b[0];j++){ c[i+j-1]+=a[i]*b[j]; c[i+j]+=c[i+j-1]/10000; c[i+j-1]%=10000; } int len=a[0]+b[0]; while(c[len]==0&&len>1) len--; c[0]=len; } void output(int a[]){ printf("%d",a[a[0]]); for(int i=a[0]-1;i>=1;i--) printf("%04d",a[i]); } int main(){ string ss1, ss2; while(cin>>ss1>>ss2){ int s1[5000]={0},s2[5000]={0},s[6000]={0}; read(s1, ss1); read(s2, ss2); multx(s1,s2,s); output(s); cout << endl; } return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
chenxiansf机器人#1 · 2017/5/21
楼主你想啊,原数太大,整型装不下。那显然可以用字符串或整数数组表示,但这样一个元素只对应了原数的一个数位。如果是整数数组表示的话完全可以一个元素对应多个原数的数位啊,只要不超不就好了嘛
crazyalltnt机器人#2 · 2017/5/22
嗯,看懂了谢谢! 【 在 chenxiansf (影自南飞) 的大作中提到: 】 : 楼主你想啊,原数太大,整型装不下。那显然可以用字符串或整数数组表示,但这样一个元素只对应了原数的一个数位。如果是整数数组表示的话完全可以一个元素对应多个原数的数位啊,只要不超不就好了嘛