| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 351 人关注过本帖
标题:关于长整数的加 乘,有点问题请教!!!
只看楼主 加入收藏
wanglf
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-9-10
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
关于长整数的加 乘,有点问题请教!!!
#include<stdio.h>
#include<string.h>
#define LIMIT 80
void jia(char *ch1,char *ch2,char *ch3)
{
    int len1=strlen(ch1),len2=strlen(ch2),len3,i,tmp,num1[LIMIT]={0},num2[LIMIT]={0},num3[LIMIT]={0};
    for(i=len1-1;i>=0;i--)
        num1[len1-1-i]=ch1[i]-48;
    for(i=len2-1;i>=0;i--)
        num2[len2-1-i]=ch2[i]-48;
    i=0,tmp=0,len3=len1>len2?len1:len2;
    while(i<len3)
    {
    num3[i]=num1[i]+num2[i]+tmp;
    tmp=0;
    if(num3[i]>=10){tmp=num3[i]/10;num3[i]%=10;}
    i++;
    }
    if(tmp!=0){num3[i]=tmp;i++;}
    len3=i;
    for(i=len3-1;i>=0;i--) ch3[len3-1-i]=num3[i]+48;
    ch3[len3]='\0';

}
    void cheng(char *ch1,char *ch2,char *ch3)
    {
        int i,j,len1=strlen(ch1),len2=strlen(ch2),len3,
                temp,num1[LIMIT]={0},num2[LIMIT]={0},num3[LIMIT]={0};
        for(i=len1-1;i>=0;i--)
            num1[len1-1-i]=ch1[i]-48;
        for(i=len2-1;i>=0;i--)
            num2[len2-1-i]=ch2[i]-48;
        for(i=0;i<len1;i++)
        {
            temp=0;
        for(j=0;j<len2;j++)
            {
                        num3[i+j]+=num1[i]*num2[j]+temp;
              temp=0;
              if(num3[i+j]>=10)
              {
                  temp=num3[i+j]/10;
                  num3[i+j]%=10;
              }
            }
        while(temp!=0)
            {
                num3[i+j]+=temp;temp=num3[i+j]/10;j++;
            }
        
        }
        len3=len1+len2;
        while(len3>1&&num3[len3-1]==0)
            len3--;
        for(i=0;i<len3;i++)
            ch3[len3-1-i]=num3[i]+48;
        ch3[len3]='\0';

    }
   
     void main()
     {
         char ch1[LIMIT],ch2[LIMIT],ch3[LIMIT];
         void jia(char *ch1,char *ch2,char *ch3);
         void cheng(char *ch1,char *ch2,char *ch3);
         printf("请输入第一个数\n");
             scanf("%s",ch1);
         printf("请输入第二个数\n");
         scanf("%s",ch2);
         printf("\n");
         jia(ch1,ch2,ch3);
         printf("两数之和:%s\n",ch3);
         cheng(ch1,ch2,ch3);
         printf("两数之积为:%s\n",ch3);
         getchar();
         getchar();
}
    这是一个长整数加乘的代码问题有二:
               1 需要一个界面类似这样
               ("*********主菜单*********\n");
               ("*       1 两数相加    *\n");
               ("*       2 两数相乘    *\n");
              ("*       3 退出         *\n");
               ("*************************\n");按相应的数字能有相应的功能      
              2 从文件读入长整数,并将运算结果保存到文件中。
 希望哪位大侠把问题都解决了,或者先一个都行,小女子急需啊,把代码改了,回我就行。再次感谢!!!
搜索更多相关主题的帖子: include 
2012-09-10 12:45
zhaojigao
Rank: 2
等 级:论坛游民
威 望:1
帖 子:19
专家分:59
注 册:2012-9-6
收藏
得分:20 
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <fstream>
using namespace std;
 #define LIMIT 80
 void jia(char *ch1,char *ch2,char *ch3)
 {
     int len1=strlen(ch1),len2=strlen(ch2),len3,i,tmp,num1[LIMIT]={0},num2[LIMIT]={0},num3[LIMIT]={0};
     for(i=len1-1;i>=0;i--)
         num1[len1-1-i]=ch1[i]-48;
     for(i=len2-1;i>=0;i--)
         num2[len2-1-i]=ch2[i]-48;
     i=0,tmp=0,len3=len1>len2?len1:len2;
     while(i<len3)
     {
     num3[i]=num1[i]+num2[i]+tmp;
     tmp=0;
     if(num3[i]>=10){tmp=num3[i]/10;num3[i]%=10;}
     i++;
     }
     if(tmp!=0){num3[i]=tmp;i++;}
     len3=i;
     for(i=len3-1;i>=0;i--) ch3[len3-1-i]=num3[i]+48;
     ch3[len3]='\0';
 
}
     void cheng(char *ch1,char *ch2,char *ch3)
     {
         int i,j,len1=strlen(ch1),len2=strlen(ch2),len3,
                 temp,num1[LIMIT]={0},num2[LIMIT]={0},num3[LIMIT]={0};
         for(i=len1-1;i>=0;i--)
             num1[len1-1-i]=ch1[i]-48;
         for(i=len2-1;i>=0;i--)
             num2[len2-1-i]=ch2[i]-48;
         for(i=0;i<len1;i++)
         {
             temp=0;
         for(j=0;j<len2;j++)
             {
                         num3[i+j]+=num1[i]*num2[j]+temp;
               temp=0;
               if(num3[i+j]>=10)
               {
                   temp=num3[i+j]/10;
                   num3[i+j]%=10;
               }
             }
         while(temp!=0)
             {
                 num3[i+j]+=temp;temp=num3[i+j]/10;j++;
             }
         
         }
         len3=len1+len2;
         while(len3>1&&num3[len3-1]==0)
             len3--;
         for(i=0;i<len3;i++)
             ch3[len3-1-i]=num3[i]+48;
         ch3[len3]='\0';
 
    }
     
     void main()
      {
         cout<<"                        *********主菜单*********\n";
         cout<<"                        *       1 两数相加     *\n";
         cout<<"                        *       2 两数相乘     *\n";
         cout<<"                        *       3 从文件操作   *\n";
         cout<<"                        *       4 退出         *\n";
         cout<<"                        ************************\n";
          char ch1[LIMIT],ch2[LIMIT],ch3[LIMIT];
          void jia(char *ch1,char *ch2,char *ch3);
          void cheng(char *ch1,char *ch2,char *ch3);
          int a=0;
          cin>>a;
          switch(a)
          {
          case 1:
              {
                  printf("请输入第一个数\n");
                  scanf("%s",ch1);
                   printf("请输入第二个数\n");
                   scanf("%s",ch2);
                    printf("\n");
                    jia(ch1,ch2,ch3);
                   printf("两数之和:%s\n",ch3);
                   break;
              }
          case 2:
              {
                   printf("请输入第一个数\n");
                   scanf("%s",ch1);
                   printf("请输入第二个数\n");
                   scanf("%s",ch2);
                   printf("\n");
                   cheng(ch1,ch2,ch3);
                   printf("两数之积为:%s\n",ch3);
                   break;
              }
          case 3:
              {
                  cout<<"从文家中读取数字操作";
                  break;
              }
          case 4:
              {
                  cout<<"退出";
                  break;
              }
          default:
              {
                  cout<<"输入错误";
                  break;
              }
          }
   
 }
由于文件的操作具体在么实现你没有说的太清楚所以就没有写出来 如果需要添加可以再 cout<<"从文家中读取数字操作"; 这里天剑你的代码
2012-09-10 16:21
wanglf
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-9-10
收藏
得分:0 
回复 2楼 zhaojigao
谢谢你哈,我自己新人一个,搞了好久都不行。还有就是只要把运算结果保存到文件中,并能读取就行。麻烦你在改一下吧,我真的什么都不懂。谢谢啊
2012-09-10 18:44
快速回复:关于长整数的加 乘,有点问题请教!!!
数据加载中...
 
   



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

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