題目描述
大數是指計算的數值非常大或者對運算的精度要求非常高,用已知的數據類型無法精確表示的數值。例如:我們要計算如下兩個數的乘積時,用我們已知的數據類型是無法精確表示其結果的:
a1 = 11111111111111111111111111111111111
b1 = 11111111111111111111111111111111111111
求:a1 * b1;
輸入要求
輸入兩行:每行一個數字,每行的數字不超過100位;
輸出要求
輸出一行:爲這兩個大數的乘積
假如輸入
1111111111111111111
111111111111111
應當輸出
123456790123456666654320987654321
#include<iostream>
#include<algorithm>
#include <vector>
#include<string.h>
#include<ctype.h>
#include<math.h>
using namespace std;
void fun();
int main()
{
fun();
return 0;
}
void fun()
{
int len1,len2,i,start,j,k,ans[201];
char str1[100],str2[100];
gets(str1);
gets(str2);
len1=strlen(str1);
len2=strlen(str2);
if(str1[0]=='0'||str2[0]=='0')
cout<<0<<endl;
else
{
memset(ans,0,sizeof(ans));
for(i=len1-1,k=0;i>=0;i--,k++)
{
for(j=len2-1,start=k;j>=0;j--)
{
ans[start++]+=(str1[i]-'0')*(str2[j]-'0');
}
}
for(i=0;i<200;i++)
{
if(ans[i]>9)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
}
for(i=200;i>=0;i--)
if(ans[i]!=0)
break;
for(;i>=0;i--)
cout<<ans[i];
cout<<endl;
}
}
完完整整一步一步分析自己寫出來的,加油!