返回信息流前一阵问过这个题{如图),自己做出来结果是对的,但是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;
}
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #93288同步于 2017/5/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
求讲解这个代码,看不太懂
crazyalltnt
2017/5/21镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
楼主你想啊,原数太大,整型装不下。那显然可以用字符串或整数数组表示,但这样一个元素只对应了原数的一个数位。如果是整数数组表示的话完全可以一个元素对应多个原数的数位啊,只要不超不就好了嘛
嗯,看懂了谢谢!
【 在 chenxiansf (影自南飞) 的大作中提到: 】
: 楼主你想啊,原数太大,整型装不下。那显然可以用字符串或整数数组表示,但这样一个元素只对应了原数的一个数位。如果是整数数组表示的话完全可以一个元素对应多个原数的数位啊,只要不超不就好了嘛