编程练习 大整数乘法
2018-01-30 20:56
253 查看
计算两个非负整数 A,B的乘积,A,B 可能会很大。
输入格式
第一行输入一个非负整数A。
第二行输入一个非负整数B。
A,B 的长度不大于500。
输出格式
输出A×B 的值。
样例输入
样例输出
代码如下:
输入格式
第一行输入一个非负整数A。
第二行输入一个非负整数B。
A,B 的长度不大于500。
输出格式
输出A×B 的值。
样例输入
4321 1234
样例输出
5332114
代码如下:
#include <iostream> #include <cstring> using namespace std; void multiply(const char * str1,const char * str2) { int l1=strlen(str1); int l2=strlen(str2); int * res=new int[l1+l2]();//注意new关键词尾端加上小括号就会将res初始化为0,特别注意小括号里不能填任何初值 //逐位处理,处理遍历字符串是从低位到高位,那么运算结果就是从整数的高位开始计算 for (int i=0;i<l1;i++) for (int j=0;j<l2;j++) res[i+j+1]+=int(str1[i]-'0')*int(str2[j]-'0');//首先计算的是高位,res要加上1是为了处理后面的偏移 //处理进位 for (int i=l1+l2-1;i>=1;i--) { if(res[i]>=10) { res[i-1]+=res[i]/10; res[i]=res[i]%10; } } if(res[0]!=0) cout<<res[0]; for(int i=1;i<l1+l2;i++) cout<<res[i]; cout<<endl; delete [] res; } int main() { string s1,s2; while(cin>>s1>>s2) { if(s1=="0"||s2=="0") { cout<<'0'<<endl; continue; } multiply(s1.c_str(),s2.c_str()); //c_str()属于c++中的函数,其目的是将c++对应的string转换成C风格的字符串。 } return 0; }
相关文章推荐
- 编程练习------C/C++分别实现字符串与整数的转换
- codevs 3123 高精度练习之超大整数乘法
- 编程练习2——02—将整数转换为相应的一个字符数组
- 编程练习------C/C++分别实现字符串与整数的转换
- 剑指Offer编程练习012——数值的整数次方
- 第4章_循环_编程练习4.16求整数的因子
- python编程练习,实现9、9乘法口诀
- 【快速傅里叶变换】【FFT】【WikiOI】【P3132】【高精度练习之超大整数乘法】
- PAT练习基础编程题目之简单输出整数
- wikioi3123 高精度练习之超大整数乘法
- 【CodeVS 3123】高精度练习之超大整数乘法 &【BZOJ 2197】FFT快速傅立叶
- 3123 高精度练习之超大整数乘法 - Wikioi
- 用分治算法编程实现两个n位十进制大整数的乘法运算
- 【CodeVS 3123】 高精度练习之超大整数乘法
- Java_21_22_for循环_【最后执行迭代】_练习_奇数偶数_打印1-1000/5的整数_1-10的阶乘_99乘法表
- 【C编程练习】2013华为校园招聘机试题9月10日题1:把整数转换成字符串 void ConvertIntToStr(int nVal, char* pStr);
- 编程练习-动态规划(矩阵乘法)
- 【编程练习】正整数分解为几个连续自然数之和
- 【C编程练习】2013华为校园招聘机试题9月10日题2:计算整数二进制表达式中0的个数 最左边1前面的0不考虑 void GenZeroNum(int nVal, int& nZeroNum);
- 【编程练习】正整数分解为几个连续自然数之和