| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 633 人关注过本帖, 1 人收藏
标题:帮忙看这道题,高精度加法
只看楼主 加入收藏
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
结帖率:50%
收藏(1)
已结贴  问题点数:20 回复次数:7 
帮忙看这道题,高精度加法
Description

输入两个整数x,y,输出它们的和。

Input

输入两个整数x,y(0 <= x,y <= 10^100)

Output

输出它们的和

Sample Input


123
234

Sample Output


357
2011-04-19 13:12
Noll_Nie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:139
注 册:2011-4-19
收藏
得分:7 
#include<stdio.h>
int Sum(int x,int y)
{
    return(x+y);
}//
int main()
{
    int a=0,b=0;
    printf("Please input a and b:");
    scanf("%d%d",&a,&b);
    printf("a+b=%d",Sum(a,b));

}//
2011-04-19 13:44
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
收藏
得分:0 
这个肯定是错的
只能算一些简单的数,题目要求是高精度加法
2011-04-19 14:22
v943761
Rank: 2
等 级:论坛游民
帖 子:42
专家分:15
注 册:2009-3-4
收藏
得分:7 
我做过,用数组做。。。下面是加法的函数
void add(char st1[],char st2[],char st[])                        //加法,st1[]是第一个数,st2[]是第二个数,st[]是用来存放它们和
{
    int a[N],b[N],c[N];
    int i,sum=0,k1,k2,k,re=0;
    if (strlen(st1)==0)                                         //当两个数其中有一个为0的情况
    {
        strcpy(st,st2);
        return;
    }
    if (strlen(st2)==0)
    {
        strcpy(st,st1);
        return;
    }
    k1=change(st1,a);                                           //返回字符串的长度,数值越小表示长度越长
    k2=change(st2,b);
    k=k1<k2?k1:k2;
    for(i=N-1;i>=k;i--)                                        //从最后一个元素开始相加,如果有进位的话,向前加,也就是[i-1]+re
    {
        sum=a[i]+b[i]+re;
        c[i]=sum%10;
        re=sum/10;
    }
    if(re>0)                                                 //如果最高位有进位,把值赋给前一位
    {
        k--;
        c[i]=re;
    }
    change2(st,k,c);                                        //把结果转化为字符串
}
change函数是用来数组转换成字符串,change2是字符串转回数组
2011-04-19 14:29
夏851773277
Rank: 1
等 级:新手上路
帖 子:48
专家分:6
注 册:2011-4-18
收藏
得分:0 
数组宽度不是不能是一个未知数吗?这也就导致你这一步“for(i=N-1;i>=k;i--) ”i从N-1无法开始呀,a[N-1]不是最后一个字符呀
2011-04-19 15:06
v943761
Rank: 2
等 级:论坛游民
帖 子:42
专家分:15
注 册:2009-3-4
收藏
得分:0 
N用了预定义了~
2011-04-19 20:14
Noll_Nie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:139
注 册:2011-4-19
收藏
得分:0 
回复 3楼 夏851773277
那用函数模板
2011-04-19 21:06
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:7 
程序代码:
#include <stdio.h>

int get_integer(char n[]) {
    char d, i = 1;
    n[0] = 0;
    d = getchar();
    while (d != '\n') {
        n[i] = d - '0';
        i++;
        d = getchar();
    }
    n[0] = i - 1;
    for (; i < 103; i++) {
        n[i] = 0;
    }
    for (i = 1; i <= n[0] / 2; i++) {
        d = n[i];
        n[i] = n[n[0] - i + 1];
        n[n[0] - i + 1] = d;
    }
    return 0;
}

int put_integer(char n[]) {
    int i;
    for (i = n[0]; i > 0; i--) {
        printf("%d", n[i]);
    }
    printf("\n");
    return 0;
}

int add_integer(char r[], char lop[], char rop[]) {
    char c = 0, i, j = (lop[0] > rop[0] ? lop[0] : rop[0]);
    for (i = 1; i <= j; i++) {
        r[i] = lop[i] + rop[i] + c;
        c = r[i] / 10;
        r[i] %= 10;
    }
    r[i] = c;
    r[0] = i + c - 1;
    return 0;
}

int main() {
    char a[103], b[103];
    get_integer(a);
    get_integer(b);
    add_integer(a, a, b);
    put_integer(a);
    return 0;
}
2011-04-19 21:28
快速回复:帮忙看这道题,高精度加法
数据加载中...
 
   



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

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