1174:大整数乘法
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 22517 通过数: 12563
【题目描述】
求两个不超过200位的非负整数的积。
【输入】
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
【输出】
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
12345678900
98765432100
【输出样例】
1219326311126352690000
我从自己写的高精度乘 修改而来的,简单哈哈
#include<iostream> #include<cmath> #include<cstring> char a[205],b[205],c[40005]={'\0'}; int multi(char t[],int t1,int m,int i)//字符乘法,t是字符串,t1是乘数,m是串长度,i是控制 { for(int l=m-1;l>=0;l--){//从a串,最右开始 for(int k=1;k<=t1;k++)//用加法来做乘法 { c[i]+=(t[l]-'0');//a中乘t1的结果放在c数组中 if(c[i]>=10)//处理进位 { c[i+1]+=1; c[i]-=10; } } i++;} return i; } using namespace std; int main() { int i=0,j,n,k=0,m=0,t=0,sum; scanf("%s",a); scanf("%s",b); m=strlen(a); n=strlen(b); for(i=n-1;i>=0;i--)//从b数组中的个位开始与a数组中的串相乘(用的加法),放在c数组中 { t=b[i]-'0';//先换成数 sum=multi(a,t,m,k);//我好像没用到返回值啊 k++;//每次10进制,位加1 } if(c[m+n-1]>0)//最大位也就是这个了,如果还有数,先输出这个数 putchar(c[m+n-1]+'0'); for(int i=m+n-2;i>=0;i--)//循环从高位串a的长度+串b的长度-2开始,到0位 printf("%c",c[i]+'0');//以字符输出来 }