时间限制: 1000 ms 内存限制: 65536 KB
提交数: 21350 通过数: 11922【题目描述】
求两个不超过200位的非负整数的积。
【输入】
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
【输出】
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
12345678900 98765432100
【输出样例】
1219326311126352690000
信息学奥赛学习资料
链接:https://pan.baidu.com/s/1IBH3uj7OdE6gx16RYxZCtw?pwd=ip6d
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define SIZE 210 int main() { char sa[SIZE],sb[SIZE]; cin>>sa>>sb; int la,lb,lc; la=strlen(sa); lb=strlen(sb); int a[SIZE],b[SIZE],c[2*SIZE]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); for(int i=la-1; i>=0; i--) { //字符串sa倒序存入数组a a[i]=sa[la-1-i]-'0'; } for(int i=lb-1; i>=0; i--) { //字符串sb倒序存入数组b b[i]=sb[lb-1-i]-'0'; } int tmp;//乘积 for(int i=0; i<la; i++) { for(int j=0; j<lb; j++) { tmp=a[i]*b[j]+c[i+j]; //计算结果存入c c[i+j+1]+=(tmp/10);//进位 c[i+j]=tmp%10; } } lc=la+lb; while(c[lc-1]==0&&lc>1) { //处理先导 0 lc--; } for(int i=lc-1; i>=0; i--) { //倒序输出c cout<<c[i]; } cout<<endl; return 0; }
标签:信息学,1174,lb,int,--,sb,sa,乘法,SIZE From: https://www.cnblogs.com/sd129/p/16652281.html