算法提高 P1001
2017-05-09 21:15
197 查看
当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.
输入:
62773417 12345678
输出:
774980393241726
模拟竖式乘法运算,大数乘法
输入:
62773417 12345678
输出:
774980393241726
模拟竖式乘法运算,大数乘法
#include <iostream> #include"string.h" using namespace std; void mul(string ch1, string ch2) { int len1=ch1.size(),len2=ch2.size(); if((len1==1&&ch1[0]=='0')||(len2==1&&ch2[0]=='0')) { cout<<"0"<<endl; return ; } string ch3; for(int i=0;i<1000000;i++) ch3+='\0'; int i,j,carry; for (i=0; i<len1; i++) { for (j=0; j<len2; j++)// { ch3[i+j]=ch3[i+j]+(ch1[i]-'0')*(ch2[j]-'0');//这里用字符型表示ch3要注意 if (ch3[i+j]>9&&(i+j)>0) { ch3[i+j-1]+=ch3[i+j]/10; ch3[i+j]=ch3[i+j]%10; } } } for (i=len1+len2-1; i>0; --i)//防止上面进位时大于9 { if (ch3[i]>9) { ch3[i-1]=ch3[i-1]+ch3[i]/10; ch3[i]%=10; } } if (ch3[0]> 4000 9)//if (ch[3]>99) { cout<<ch3[0]/10; ch3[0]=ch3[0]%10; } for (i=0; i<len1+len2-1; i++) cout<<char(ch3[i]+48); cout<<endl; } int main() { string ch1,ch2; while (cin>>ch1>>ch2) { mul(ch1,ch2); } return 0; }
相关文章推荐
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 ADV-197 P1001
- 算法提高 P1001
- 算法提高P1001
- 2016蓝桥杯算法提高——P1001(大数乘法)
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001(Java解题)
- 算法笔记_097:蓝桥杯练习 算法提高 P1001(Java)
- 算法提高 P1001 (大数相乘)
- 蓝桥杯 ADV-197 算法提高 P1001
- 算法提高 P1001 (大数乘法)
- 算法提高 P1001
- 算法-蓝桥杯-算法提高 P1001(JAVA)
- 蓝桥杯 ADV-197 算法提高 P1001
- 算法提高 P1001(模拟)
- 算法提高 P1001
- 算法优化二——如何提高人脸检测正确率