岛屿的缘分
Description
人和人的相识是一种缘分,其实人有幸到某地也是一种缘分。某风景优美的K小岛的缘分和其他景点的缘分来得不一般,K岛上有一个石碑刻上了两个很大很大的整数x和y,和一个正整数K,后面写道:“谁能准确的写出x和y的乘积中最右边的k位数(如果乘积不足K位则在左边用“0”补足K位),他就是和K小岛有缘分的人”,李先生到了K小岛,他马上叫他的秘书算一算,写出x和y的乘积中最右边的k位数,看看李先生和他的秘书是否和K小岛有缘分。现在也请你完成这个工作(注意: 如果乘积不足K位则在左边用“0”补足K位)。
Input
从文件b.in读入数据,文件中共有三行,第一行是一个位数不大于120的正整数x,第二行是一个位数不大于120的正整数y,第三行是一个正整数K(1=< K <=250)。
Output
结果输出到文件b.out中,只有一行,就是x和y的乘积中最右边的k位数。
Sample Input
输入输出样例1:
b.in
30
60
3
输入输出样例2:
b.in
12
13
5
Sample Output
输入输出样例1:
b.out
800
输入输出样例2:
b.out
00156
.
.
.
.
.
分析
高精乘
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[200],b[200],c[1000],k,l1,l2;
string s,t,r;
int main()
{
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
cin>>s>>t;
scanf("%d",&k);
l1=s.size();
for (int i=l1;i>=1;i--)
a[l1-i+1]=s[i-1]-'0';
l2=t.size();
for (int i=l2;i>=1;i--)
b[l2-i+1]=t[i-1]-'0';
for (int i=1;i<=l1;i++)
for (int j=1;j<=l2;j++)
{
c[i+j-1]=a[i]*b[j]+c[i+j-1];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
int i=l1+l2;
while (c[i]>10)
{
c[i+1]=c[i]/10;
c[i]%=10;
i++;
}
for (int i=k;i>=1;i--)
printf("%d",c[i]);
fclose(stdin);
fclose(stdout);
return 0;
}