学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

大数 高精运算------加法

本主题由 静夜思 于 2008-5-16 11:36 拒绝承认原创

大数 高精运算------加法

#include <stdio.h>
#include <stdlib.h>

char s[101];
int sum[101];

int main() {
    int i, j;
    while (gets(s), strcmp(s, "0")) {//巧妙化解开多少个数组 算多少个数的和的局面
        j=strlen(s);
        for (i=j-1; i>=0; --i) {
            sum[j-i-1]+=(s[i]-'0');//s[i]-'0'表示字符数字转化成int数字  倒序加到sum中 sum第一个数是s的最后一个数的和
        }
    }
    j=101; while(!sum[j])--j;  //重新赋值j 使j为目前sum的总位数
    for (i=0;i<j;++i) {   //如果s[i]加成两位数 将十位数加给前一位数
        sum[i+1]+=sum[i]/10;
        sum[i]=sum[i]%10;
    }
    for (i=j; i>=0; --i) {
        printf("%d", sum[i]);
    }

}------------------------------------------------------------------------------------------------------------------------------
总结一下
(1)开一个字符数组 存放数字 开一个int数组存放之和
(2)while (gets(s), strcmp(s, "0")) 使得不用开多余的数组来存放数据实现边输入边相加
(3)s[i]-'0'将字符的数字转成int数字 然后加到sum中 注意是倒序
(4)算完sum之后一定要重新定义j为sum的最大位数
(5)后面一个for 的工作就是如果加的数超过10就把十位数加到前面去 然后只保留个位数
(6)最后倒序输出sum即可 哈哈 我想的也够累的……到此为止吧

TOP

顶上去

TOP

加法这么简单……做个除法出来看看……………………
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

引用:
以下是引用 StarWing83 在 2008-5-17 11:12 的发言:

加法这么简单……做个除法出来看看……………………
除法就是减法,只不过为了提速减的时候有时是错位的而已
图论能力提升

TOP

翅膀上次燕子应该写过除法了哦...就是那个把末尾拿到开头,然后除的那题
学习需要安静。。海盗要重新来过。。

TOP

那个不是除法……燕子和我都是用加法实现的………………
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

我 还发了一个乘法的  加精了 就是没人顶  我现在正在做除法  过几天就贴过来!!!!!
  大数除大数 要有牛顿迭代 算成 倒数 然后再乘就可以了
本帖最近评分记录

TOP

我只用汇骗做过乘除法都是移位实现(整数),但有一直想不到带小数的如何实现.
期待C版出现

TOP

楼主的代码除了效率低下,没什么好说的
http://yzfy.org/c
C/C++算法QQ群:46520219 57909089

TOP

发新话题