| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 521 人关注过本帖
标题:有一个问题,没有头绪,能给我一点指点吗?
只看楼主 加入收藏
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
结帖率:46.15%
收藏
已结贴  问题点数:20 回复次数:4 
有一个问题,没有头绪,能给我一点指点吗?
•编写一个程序,实现长整数的相加和相减(相乘和相除(选做))
–注:长整数就是长度很长,超出计算机的数据类型的表示范围的数
搜索更多相关主题的帖子: 计算机 
2013-05-12 16:48
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:7 
2013-05-12 18:22
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
收藏
得分:0 
这个方法有点难,而且老师没要求用到函数的调用,我的想法是把两个长数的每一位相加,但总是求不出来
void main()
{
   int i;
   int x[10],y[10],a[10];
   for(i=0;i<10;i++)
   scanf("%d",&x[i]);
   for(i=0;i<10;i++)
   scanf("%d",&y[i]);

   printf("This two number's plus is:");
   for(i=0;i<10;i++)
   a[i]=x[i]+y[i];
   printf("%d",a[i]);
   getch();
}
就是先不考虑它会到十进一的情况
2013-05-14 21:57
bccn新
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:57
专家分:144
注 册:2013-5-10
收藏
得分:7 
#include<stdio.h>
#include<string.h>
#define N ('9'-9)
main()
{char a[50],b[50],c[51],*p,*q;
int i,j,k,l;
  printf("input 2 long num:");
  gets(a);
  gets(b);
  if(b[0]==0)
  gets(b);
  i=strlen(a);
  j=strlen(b);
  p=a+i-1;
  q=b+i-1;
  if(i<j)
 l=k=j;
 else
 l=k=i;
 c[k+1]=0;
 do
{ c[k--]=(*p)-N+(*q)-N;
   p--,q--,i--,j--;
} while(i!=0&&j!=0);
if(i)
{while(i)
c[k--]=(*p)-N;
p--,i--;}
else if(j)
{while(j)
c[k--]=(*q)-N;
q--,j--;}

 c[0]=0;
 k=l;
 while(l>0)
{ if(c[l]>=20)
{ c[l]=c[l]-20;
 c[l-1]=c[l-1]+2;}
 else if(c[l]>=10)
{ c[l]=c[l]-10;
 c[l-1]=c[l-1]+1;}
 l--;
 }
 if(c[0]==0)
 for(i=1;i<=k;i++)
 printf("%c",c[i]+N);
 else
 puts(c);
}
这是求加法,可能有点长,你可以
再改简单一点。
2013-05-14 23:26
梅可伟梅可伟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:180
注 册:2013-3-11
收藏
得分:7 
首先我说一下思路,因为所求的数过大,所以只能用数组或字符串来储存
下面是加法,而乘法也差不多,就是用最原始的方法求(用小学的时候学习乘法的方法),另外需要考虑进位问题,超过10进位,
#include <stdio.h>
#include <string.h>
#define N 50
void main()
{
    char a[N],b[N];
    int c[N]={0},d[N]={0},i,j,k,t,count1,count2;
    gets(a);//输入一个数,用字符串接收
    gets(b);//输入另一个数,用字符串接收
    for(i=49,j=strlen(a)-1;j>=0;i--,j--)//把加数转换为数组形式储存,便于讲算
        c[i]=a[j]-'0';
    count1=i+1;
    for(i=49,j=strlen(b)-1;j>=0;j--,i--)//把另一个加数转换为数组形式储存,
        d[i]=b[j]-'0';
    count2=i+1;
    if(count1<count2) t=count1;
    else t=count2;
    printf("%d,%d,%d\n",count1,count2,t);
    for(i=t;i<N;i++)//把每们分别相加
        d[i]=d[i]+c[i];
    for(i=N-2;i>=t-1;i--)//进位
        d[i]=d[i]+d[i+1]/10;
    for(i=t;i<N;i++)//超过10的部分扔掉
        d[i]=d[i]%10;
    for(i=0;i<N;i++)
    {    if(d[i]!=0) {k=i;break;}}
    for(i=k;i<N;i++)
        printf("%d",d[i]);
    printf("\n");
}
2013-05-15 15:30
快速回复:有一个问题,没有头绪,能给我一点指点吗?
数据加载中...
 
   



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

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