poj2389

#include <iostream> 

using namespace std; 

const int MAX=40; //题目要求整数位不超过40

const int result=100; //两数相乘结果要较大,位数较多

char a[MAX+10]; 

char b[MAX+10]; //接受输入的数字

int  amul[MAX+10]; 

int  bmul[MAX+10]; //存储转换过后的数值

int  xj[result+10];//乘积  

void interger(char *s,int *t,int length)//将字符型转换成整型 

 { 

     int i=length-1;//i从后往前 

     int in=0; 

     for(;in<length;in++,i--)//字符型的最后一个为整型的第一个 

     {  

         t[in]=s[i]-'0';//也可以写为t[index]=s[i]-48 

     } 

 } 

 int main() 

 { 

     int i, j; 

     cin>>a>>b;//输入ab两个乘数 

     if(!strcmp(a,"0")||!strcmp(b,"0"))//如果输入的数中有一个数为0,输出

     { 

         cout<<"0"<<endl; 

         return  0; 

     } 

     //调用interger将字符型化为整型

     interger(a, amul, strlen(a)); 

     interger(b, bmul, strlen(b));  

     for(i=0;i<strlen(b);i++) //此处先不考虑进位

     { 

         for(j=0;j<strlen(a);j++)//b中的第一个数分别去乘a中的数,结束后b++ 

         { 

             xj[i+j]+=bmul[i]*amul[j];//乘积叠加到原位置的数上

         } 

     } 

     for(i=0;i<result;i++) 

     { 

         if(xj[i]>=10)// 大于10的数要进位

         { 

             xj[i+1]+=xj[i]/10;//进位的数是除以10所得的整数 

             xj[i]=xj[i]%10;//保留原位的数是除以所剩的余数

         } 

     } 

     //将最高位前面多余的0去除 

     int k=result-1;//倒叙 

     while(xj[k]==0) 

     { 

         k--; 

     }//得到的k为最高位不为0的数 

     //倒序输出 

     for(;k>=0;k--)//kwhile循环后的 

     { 

         cout<<xj[k]; 

     } 

     cout<<endl; 

     return  0; 

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值