uva 10106 Product

/*程序思想
题意:给两个很大的数求他们的成绩 
  9  9
  9  9
—————
  8 9 1
8 9 1
—————
8        17      10       1
sum[3]  sum[2]  sum[1]   sum[0]
sum储存该位总和和在取余 
*/ 

#include <stdio.h>
#include<string.h>
const int  MAXN=510;

int main(int argc, char *argv[])
{
	char temp1[MAXN],temp2[MAXN];
	int sum[MAXN];
	int i,k,c,j;
	memset(temp1,0,sizeof(0));
	memset(temp2,0,sizeof(0));
	while(scanf("%s%s",temp1,temp2)!=EOF)
	{
		memset(sum,0,sizeof(sum));
		if(temp1[0]=='0' || temp2[0]=='0') //若有一个数为0,输出0 
		{
			printf("0\n"); continue;
		}
		int len1=strlen(temp1);
		int len2=strlen(temp2);
		for(i=0;i<len1;i++)
		   temp1[i]-='0';
		for(i=0;i<len2;i++)
		   temp2[i]-='0' ;  //ascii<10便于计算 
		for (i=len1-1;i>=0;i--)
		  {
		  	 k=len1-1-i; 
  		     for (j=len2-1;j>=0;j--)
			   {
   				   sum[k]=sum[k]+temp1[i]*temp2[j];
   				   k++;
   			   }	
  		  }
  		  c=0;
  		  i=MAXN-1;
  		  k=0;
  		  while(i--)
  		  {
  		  	    int s=sum[k]+c;//赋予s,若直接用sum取余,导致c的值不准确 
 	  		    sum[k]=s%10;
				c=s/10;
				k++;   	
  		  }
  		  for (i=MAXN-1;i>=0;i--) if(sum[i]) break;
  		  for (;i>=0;i--) printf("%d",sum[i]);
  		  printf("\n");
  		  memset(temp1,0,sizeof(0));
	      memset(temp2,0,sizeof(0));
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值