C程序-蓝桥-P1001(大数乘法)

当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.

输入:
  62773417 12345678

输出:
  774980393241726

 

思路:按照乘法规则相乘即可,需要注意结果为0和首位为0的情况;

例子:两个一位数相乘,结果可能是一位数,也可能是两位数,3*3=9,5*5=25

 

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10     //宏定义 

int main( ) 
{
	//定义的数组稍微比目标数组大,防止溢出 
	char a[N],b[N];
	int c[2*N]={0};
	int i,j;
	scanf("%s",a);
	scanf("%s",b);
	int len1=strlen(a);//求字符串长度 
	int len2=strlen(b);
	//根据乘法运算,从个位开始乘 
	for(i=len1-1;i>=0;i--)
	{
		for(j=len2-1;j>=0;j--)
		{
			c[i+j+1]+=(a[i]-'0')*(b[j]-'0');//数字字符减去‘0’即为对应整数,ASCLL码 
			if(c[i+j+1]>9)//单位数大于9 
			{
				c[i+j]+=c[i+j+1]/10;//大于10的进给高位 
				c[i+j+1]%=10;//留下单位 
			}
		}
	}



	if(0==c[1]&&0==c[0])//乘积为0 
	{
		printf("0");
	}
	else
	{
		if(c[0]!=0)//首位为0不用输出,非0安实际输出 
		printf("%d",c[0]);
		for(i=1;i<len1+len2;i++)
		printf("%d",c[i]);
	}


	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值