浙大1027 大數的乘法
大數的乘法
Description:
給出一些整數對,一個為可能接近100位的大數,另一個為1位數,求這些數對的乘積。
Sample Input:
1 1
123 0
12345678910 8
123456789101234567891012345678910 7
Sample Output:
1
0
98765431280
864197523708641975237086419752370
解答:
#include <iostream>
#include <string>
using namespace std;//所有的函數放在這句下面
void mul(string &a,int b)
{
int tmp,c=0,len=a.size();
for(int i=len-1;i>=0;i--)
{
tmp=(a[i]-'0')*b+c; //字符轉化為數字(即減去字符0)
c=0;
while(tmp>9)//要用while,比如說tmp=27,就有兩次進位
{
tmp-=10;
c++;
}
a[i]=tmp+'0'; //數字再轉化成字符存到string數組中去
}
if(c>0) a.insert(a.begin(),c+'0');
//如果第一位也出現進位,就把數組自動擴充一位用來存進位
// insert這個操作時是將字符插入到迭代器的前一個位置
//也就是說插入的那個字符變成第一位,其余的右移
}
int main()
{string a;
int b;
while(cin>>a>>b)
{
if(b==0)cout<<'0'<<endl;
else if(b==1) cout<<a<<endl;
else
{
mul(a,b);
cout<<a<<endl;
}
}
system("pause");
return 0;
}
文章來源:
http://www.cnblogs.com/qnbs1/archive/2010/03/21/1691076.html