您的位置:首页 > 编程语言 > C语言/C++

给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。

2017-12-21 17:57 148 查看
#include <stdio.h>
#include <string.h>
#define M 500
void zero(char *a);
int main(void)
{
char a[M],b[M],result[M*M];
scanf("%s %s",a,b);
int count=0,begin=0;
int ta=0,tb=0,tc=0;
int tmp=0;
int lena=0,lenb=0;
int dlena=0,dlenb=0;
int sum=0;
zero(result);
lena = strlen(a);
lenb = strlen(b);
dlena = lena-1;
dlenb = lenb-1;
do
{
ta = dlena>=0?a[dlena--]-'0':0;
tb = b[dlenb]-'0';
tc = tc + ta * tb;
tmp = tc % 10;
tc = tc>9?tc/10:0;
sum = result[begin]-'0'+tmp;
if(sum>9)
{
tc += sum/10;
sum = sum%10;
}
result[begin++] = sum+'0';
if(dlena<0&&tc==0)
{
dlena = lena-1;
dlenb--;
count = begin>count?begin:count;
begin = lenb-dlenb-1;
}
}while(dlenb>=0);

for(;count>0;)
{
putchar(result[--count]);
}
return 0;
}

void zero(char *a)
{
int i=0;
for(i=0;i<M*M;i++)
{
a[i] = '0';
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言
相关文章推荐