/*
大明a+b
話說,經過了漫長的乙個多月,小明已經成長了許多,所以他改了乙個名字叫「大明」。
這時他已經不是那個只會做100以內加法的那個「小明」了,現在他甚至會任意長度的正小數的加法。
現在,給你兩個正的小數a和b,你的任務是代表大明計算出a+b的值。
input
本題目包含多組測試資料,請處理到檔案結束。
每一組測試資料在一行裡面包含兩個長度不大於400的正小數a和b。
output
請在一行裡面輸出輸出a+b的值,請輸出最簡形式。詳細要求請見sample output。
sample input
1.1 2.9
1.1111111111 2.3444323343
1 1.1
sample output
43.4555434454
2.1思路:看到這一道題你不會覺得特別難,只是太麻煩,可能會想到用小數點將資料分成兩個大數進行計算,這也是一種方法 ,不過太過於麻煩,接下來我所說的是一種相對上面簡便一點的方法,首先題目上面既然說明位數不會超過400,那我們為什麼不定義乙個800+的陣列,就算全是整數或者全是小數, 我們也完全能將它放入陣列 ;首先依舊需要判斷小數點的位置,然後標記後,這樣剩下的數就成為乙個完整的大整數,這樣我們就比較容易進行計算,我們將陣列的[400]作為對照點,a1[0]--a1[399]存放整數,a[401]----a[800]存放小數,b1[410]也同樣按照這樣操作 ,將資料放入陣列中,s1->a1,s2->b1,這樣整數小數各個位上都是對照的,剩下的進行補零,然後就是大數之間的計算,在最後輸出的時候,需要判定下是否為零,同樣在輸出i=400的時候小數點的存在是否要輸出 ,,(詳見程式)
#include
#include
char s1[410];
char s2[410];
int a1[410*2];
int b1[410*2];
int res[410*2];
void init()
void create(char *s,int *a)
else
for(i=k-1,j=400;i>=0;i--,j++)//存入小數
for(i=k+1,j=399;i
}void carry_over()//大數的進製計算
}void print_all()
int j = 0;
while(res[j] ==0 && j<400)//去掉整數方向的第乙個不為零之前的0;
if(i==399 && j==400)//整數和小數都為零了 輸出0;
else
if(j!=400) //判斷小數點後面是否有小數,有則輸出小數點 ,無則不輸出
}printf("\n");}}
int main()
return 0;
}
大數加法(整數的加法
大數加法的原理是利用模擬人計算比較大的數的時候採用的用的一種演算法。實際上就是小學的加法運算,不過是用字元陣列,模擬的運算。思路 1 先定義兩組足夠長的字元陣列,和整形陣列。將數字陣列裡面的元素全部初始化為零。2 然後將輸入的數字字串,轉變為數字,存放在整形陣列內,注意存放時將低位到高位依次存放在陣...
大數系列 大數加法
這幾天專門學習了一下大數的有關計算方法,大數加減乘除模都會在後面講到。一 大數加法 加法算是最簡單的一類大數問題,先寫上我的 include includeusing namespace std char num1 111 num2 111 num3 111 int l,m int mark voi...
大數加法,大數乘法
include include include typedef struct node pnode 函式宣告 int multiply char strmultipliera,char strmultiplierb,char strrst pnode initlist char strmultipl...