| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2351 人关注过本帖
标题:自己写的大整数相乘的程序
取消只看楼主 加入收藏
di494383142
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2010-12-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
自己写的大整数相乘的程序
偶是新手。。。
#include<stdio.h>                 
#include<string.h>
int main(){
    char w[200],e[200];             // 存输入数
    int x[200],y[200];              // 存数字放
int    val[400],val1[400],sum1,sum2;  // 存放结果,计数等
    int i,j,sum,l1,l2,h,l3;
    gets(w);
    gets(e);
   l1=strlen(w);                 //计算位数
   for(i=0;i<l1;i++){            //字符转换成数字并存入数组     
       x[i]=w[i]-'0';
   }
   sum1=0;
   for(i=l1-1;i>=0;i--){          //计算后到0的个数
       if(x[i]==0)
         sum1++;
       else
           break;
   }
   l2=strlen(e);                  //计算位数
   for(i=0;i<l2;i++){                 //字符转换成数字并存入数组
        y[i]=e[i]-'0';
   }  
   sum2=0;
   for(i=l2-1;i>=0;i--){         //计算后到0的个数
       if(y[i]==0)
           sum2++;
       else
           break;
   }
   for(i=0;i<l1+l2;i++){       //数组初始化
        val[i]=0;
        val1[i]=0;
   }

   for(i=0;i<l2;i++){             // 错位相乘结果相加放入数组VAL[]
       for(j=0;j<l1;j++){
           sum=y[i]*x[j];
         val[i+j]=sum+val[i+j];
       }
   }
   h=0;
   for(i=l1+l2-1;i>=0;i--){      //算除之外的元素个数
            if(val[i]!=0)
                h++;
   }
   for(i=h-1,j=0;i>=0;j++,i--){        //错位放入VAL1[]数组
 val1[j]=val[i];
   }
   for(j=0;j<l1+12;j++){               //拆分结果数组
       if(val1[j]>=10){
            val1[j+1]=(val1[j]/10)+val1[j+1];
             val1[j]=val1[j]%10;
       }
   }   
   l3=0;
   for(j=l1+l2-1;j>=0;j--){           //计算前导0个数

     if(val1[j]==0)
         l3++;
     else
         break;

   }
   for(j=l1+l2-1-l3;j>=0;j--){           //去掉前导0并输出结果

       printf("%d",val1[j]);
   }
   for(j=sum2+sum1;j>0;j--){            //输出后导0
       printf("0");
   }
   printf("\n");
   
    return 0;
}
搜索更多相关主题的帖子: 整数 相乘 
2010-12-21 21:38
di494383142
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2010-12-20
收藏
得分:0 
只是觉得自己写的太过繁琐,谁更有好算法指教一下,谢谢。。。。
2010-12-21 21:47
di494383142
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2010-12-20
收藏
得分:0 
哎呀 我在oj上提交时发现此题有问题,我实在照不出错在哪了,谁能帮看看呢
2010-12-23 18:36
di494383142
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2010-12-20
收藏
得分:0 
谢谢你楼上的你的有些太深奥了,我有些看不懂;
不过我的错找出来了
for(j=0;j<(l1+12)*2;j++){ //拆分结果数组
 if(val1[j]>=10){
 val1[j+1]=(val1[j]/10)+val1[j+1];
 val1[j]=val1[j]%10;
 }
 }
改成这样的就OK了,没有考虑拆分自后回多出约2倍的长度
2010-12-23 19:21
di494383142
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2010-12-20
收藏
得分:0 
谢谢你楼上的你的有些太深奥了,我有些看不懂;
不过我的错找出来了
for(j=0;j<(l1+12)*2;j++){ //拆分结果数组
 if(val1[j]>=10){
 val1[j+1]=(val1[j]/10)+val1[j+1];
 val1[j]=val1[j]%10;
 }
 }
改成这样的就OK了,没有考虑拆分自后回多出约2倍的长度
2010-12-23 19:21
快速回复:自己写的大整数相乘的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017131 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved