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

求问一道c++题目

crazyalltnt
2017/5/13镜像同步40 回复
程序已经写出来了,完成了大数相乘,但是他说要有多行输入,我。。。。怎么实现啊。多行输入多次判断,输入行数还不确定,求助!题目如图,代码如下! #include<iostream> #include<cstring> using namespace std; //数组逆序 void reverseOrder(char str[], int p,int q) { char temp; while(p<q) { temp=str[p]; str[p]=str[q]; str[q]=temp; q--; p++; } } //大数相乘 char* multiLargeNum(char a[],char b[]) { int m=strlen(a); int n=strlen(b); char* result=new char[m+n+1]; memset(result,'0',m+n); //将所有元素置换为该字符ASCII码值 result[m+n]='\0'; reverseOrder(a,0,m-1); reverseOrder(b,0,n-1); int mulitFlag; //乘积进位 int addFlag; //加法进位 for(int i=0;i<=n-1;i++) //b的每一位 { int multiFlag=0; int addFlag=0; for(int j=0;j<=m-1;j++)//a的每一位 { //'0'-48=0 int temp1=(a[j]-48)*(b[i]-48)+multiFlag; multiFlag=temp1/10; temp1=temp1%10; int temp2=(result[i+j]-48)+temp1+addFlag; addFlag=temp2/10; result[i+j]=temp2%10+48; } result[i+m]+=multiFlag+addFlag; } reverseOrder(result,0,m+n-1);//逆序回来 return result; } //测试主程序 int main() { const int N=10000; char a[N]; char b[N]; cin.getline(a,N,'\n'); cin.getline(b,N,'\n'); char* res=multiLargeNum(a,b); if(res[0]!=48) cout<<res[0]<<endl; cout<<res+1<<endl; delete []res; return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
chenxiansf机器人#1 · 2017/5/14
getline(cin, s)
crazyalltnt机器人#2 · 2017/5/14
【 在 chenxiansf 的大作中提到: 】 : getline(cin, s) 我这个目前的程序是要把相乘的两个大叔输入在两行,题中是输入在一行,而且有多组,全部输入完后才显示对应每一行的答案,这个getline(cin,s0不太懂在这怎么用啊,谢谢!
chenxiansf机器人#3 · 2017/5/14
既然是一行那就先getline得到这一行,然后split根据空格拆分就得到了 【 在 crazyalltnt 的大作中提到: 】 : 我这个目前的程序是要把相乘的两个大叔输入在两行,题中是输入在一行,而且有多组,全部输入完后才显示对应每一行的答案,这个getline(cin,s0不太懂在这怎么用啊,谢谢!
chenxiansf机器人#4 · 2017/5/14
我看你这贴的图里题目输入是一行两个数啊,你每次处理时cin两个string不就行了吗 【 在 crazyalltnt 的大作中提到: 】 : 我这个目前的程序是要把相乘的两个大叔输入在两行,题中是输入在一行,而且有多组,全部输入完后才显示对应每一行的答案,这个getline(cin,s0不太懂在这怎么用啊,谢谢!
crazyalltnt机器人#5 · 2017/5/14
【 在 chenxiansf 的大作中提到: 】 : 我看你这贴的图里题目输入是一行两个数啊,你每次处理时cin两个string不就行了吗 谢谢,两个数在一行解决了,但只能输入一组就输出了。那这个多行输入完再输出怎么解决,求详细讲解,小白惭愧。[ema23]谢谢
chenxiansf机器人#6 · 2017/5/14
string s1, s2 while (cin >> s1) { cin >> s2; // TODO } 【 在 crazyalltnt 的大作中提到: 】 : 谢谢,两个数在一行解决了,但只能输入一组就输出了。那这个多行输入完再输出怎么解决,求详细讲解,小白惭愧。谢谢
bond1993机器人#7 · 2017/5/14
记得原来是默认scanf到一个类似EOF的东西时认为输入结束
crazyalltnt机器人#8 · 2017/5/14
我改成了这样,它可以多行输入,但每次输入都会输出结果,如果把cout放到括号外面好像不可以吧?
crazyalltnt机器人#9 · 2017/5/14
【 在 bond1993 的大作中提到: 】 : 记得原来是默认scanf到一个类似EOF的东西时认为输入结束 但是while输入!=EOF时也是判断每次输入,结果也会在输入后输出啊