题目:
The problem is to multiply two integers X, Y. (0<=X,Y<10250)
The input will consist of a set of pairs of lines. Each line in pair contains one multiplyer.
For each input pair of lines the output line should consist one integer the product.
12
12
2
222222222222222222222222
144
444444444444444444444444
源代码:
#include <stdio.h> #include <string.h> #define MAXL 250+5 #define MAXO 500+5//答案的最大长度 char x[MAXL]; char y[MAXL]; char ans[MAXO]; int main(){ int i,j,left,k,pos,product,carry; int x_len,y_len; //freopen("data","r",stdin); while(scanf("%s%s",x,y)==2){ ans[MAXO-1]='\0'; k=left=MAXO-1; x_len=strlen(x); y_len=strlen(y); if(x_len==1&&x[0]=='0'||y_len==1&&y[0]=='0'){//若有一个乘数为0,则直接输出0,果然被这个地方坑了好久! printf("0\n"); continue; } for(i=0;i<MAXO-1;i++) ans[i]='0'; for(i=y_len-1;i>=0;i--){ k--; pos=k; carry=0; for(j=x_len-1;j>=0;j--){ product=(y[i]-'0')*(x[j]-'0')+ans[pos]-'0'+carry; ans[pos]=product%10+'0';//一个位上的数=(原来该位上的数+进位的数+乘积)取余所得 pos--; carry=product/10;//一个位的进位其实包括之前那位求和的进位以及乘积的进位 } while(carry){//还要对乘法结束后的进位进行处理 carry+=ans[pos]-'0'; ans[pos]=carry%10+'0'; pos--; carry/=10; } left=left<=pos+1?left:pos+1;//left表示结果能达到的最左边的位置,输出答案时,以该位作为首地址即可 } printf("%s\n",ans+left); } return 0; }
Product UVA 10106,布布扣,bubuko.com
原文地址:http://blog.csdn.net/u011915301/article/details/38270825