1. 程式人生 > >大數減法 C語言

大數減法 C語言

關於大數減法其核心就是:減法的演算法也是從低位開始減,先要判斷減數和被減數那一個位數長,被減數位數長是正常減;減數位數長,則減數-被減數,最後還要加上負號;兩個位數長度相等時,最好比較哪一個數大,否則負號會處理的很繁瑣;處理每一項時,要先按對應的位用被減數減去減數,用陣列存入,如果差小0,需要向上一位借位,再把這一位的差加10,以此類推。

程式碼如下:

//大數減法
#include<stdio.h>
#include<string.h>
#define M 100005
using namespace std;
char s1[M],s2[M],s[M];
int  a[M],b[M],c[M];
/*較大數減去較小數,即正常減*/
void ss(char s1[],char s2[],int n,int m)
{
    int i,j,a[M],b[M];
    for(i=0; i<n; i++)
        a[i]=s1[n-i-1]-'0';
    for(i=0; i<m; i++)
        b[i]=s2[m-i-1]-'0';
    for(i=0; i<n; i++)
        c[i]=a[i]-b[i];
    for(i=0;i<n;i++)
      if(c[i]<0)
        {
            while(c[i]<0)
            {
              c[i+1]=c[i+1]-1;//借位(高位減一,低位加十)
              c[i]+=10;
            }
        }
}
int main()
{
    int n,m,i,j,k,kk;
    memset(s1,0,sizeof(s1));
    memset(s2,0,sizeof(s2));
    while(~scanf("%s%s",s1,s2))
    {
        n=strlen(s1);
        m=strlen(s2);
        printf("s1=%d s2=%d\n",n,m);
        if(n>m)
            ss(s1,s2,n,m);
        else if(n<m)
        {
            printf("-");
            ss(s2,s1,m,n);
        }
        else
        {  /*當兩個數位數相同時,判斷兩個數的大小 */
            k=strcmp(s1,s2);
/*strcmp()函式:從第一位開始比較兩個字串大小(不管位數多少) 
k>0則s1較大,k<0則s2較大,k=0則s1=s2*/  
            if(k==0)
            {
                printf("0\n");
                continue;
            }
            else if(k>0)
                ss(s1,s2,n,m);
            else
            {
                printf("-");
                ss(s2,s1,m,n);
            }
        }
        if(n>m) kk=n;
        else kk=m;
        while(c[kk]==0) kk--;//排除前導0
        for(i=kk; i>=0; i--)
            printf("%d",c[i]);
        printf("\n");
    }
    return 0;
}


相關推薦

大數減法 C語言

關於大數減法其核心就是:減法的演算法也是從低位開始減,先要判斷減數和被減數那一個位數長,被減數位數長是正常減;減數位數長,則減數-被減數,最後還要加上負號;兩個位數長度相等時,最好比較哪一個數大,否則負

大數減法C++

今天訓練coding能力,花了兩小時從頭編了一次大數減法,包括註釋 #include <iostream> using namespace std; int main() { string a,b;//將資料以字串形式輸入 cin>>a;

大數相乘C語言(轉)

轉自:https://blog.csdn.net/l_liangkk/article/details/51980763 進一步學習來到 了大數乘法,關於大數乘法的思路前面也簡單提過, 其核心就是:兩個大數,從末尾開始逐位相乘。相乘結果儲存在另外一個數組裡面(也從陣列末尾開始依次往前儲存)

大數 乘法 C語言(轉)

其核心就是:兩個大數,從末尾開始逐位相乘。相乘結果儲存在另外一個數組裡面(也從陣列末尾開始依次往前儲存)。然後將儲存位置大於9的數進行進位處理。 為了便於理解下面有兩個例子: 由運算例子可知;相乘後的位數k不會超過m+n; //大數乘法 #include&

大數加法------C語言程式碼實現(含負數)

兩個符號相同的數,直接相加即可,所得結果符號不變;兩數符號不同時,需要對兩數的絕對值進行比較,結果的符號同絕對值較大者,值為較大者減去較小者。   以下是正確C語言原始碼:   #include<cstdio> #include<cstring&

C語言實現大數減法

關於大數減法其核心就是:減法的演算法也是從低位開始減,先要判斷減數和被減數那一個位數長,減數位數長是正常減;被減數位數長,則被減數減減數,最後還要加上負號; 兩個位數長度相等時,最好比較哪一個數大,否則負號會處理的很繁瑣;處理每一項時,要先按對應的位用被減數減去減數,用陣列

【qduoj - 夏季學期創新題】C語言課程設計-階梯問題(dp,高精度大數

題幹: 描述   N級階梯,人可以一步走一級,也可以一步走兩級,求人從階梯底端走到頂端可以有多少種不同的走法。 輸入   一個整數n,代表臺階的階數。 輸出   求人從階梯底端走到頂端可以有多少種不同的走法,輸出結果的格式為大整數

C語言——大數加法

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define MAX 1000 void my_and(char a[],char b[

C語言輾轉相除/相減法(歐幾里得演算法)求最大公約數和最小公倍數

#include <stdio.h> #include <stdlib.h> //題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 //採用任何兩種演算法來完成上述題目,並比較2種演算法的時間複雜度和空間複雜度。 int main() { int

C語言實現大數相加(思路+程式碼+執行結果)

大數相加 思路: 1.先將字串倒序並轉換為數字 2.逐位相加,並存入一個數組e[i]中 3.將得到的結果進行進位處理 4.轉換並把陣列e[i]反轉,迴圈輸出結果 #include<iostrea

51nod1005大數加法(C語言實現大數

大數相加 基本思路是: 1、兩個字串把大數讀進來  然後把每一位字元換成數字存到 x y 數組裡面 2、拿 x  y 陣列從後往前 對應位相加  (注意進位) 相加的結果依次存到 c數組裡 3、然後對c陣列處理 如果最高位小於0  那麼結果肯定是負數  就列印一個負

HDU-1002(C語言大數加法

A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 436132 Accepted Submission(

C語言大數乘法

學習程式設計的我們有一個根深蒂固的觀念,int佔4個位元組,4個位元組?也就是說int最大能表示的數為42億多,也就是說最多能表示10位數。對於更多的數呢?沒有辦法嗎?當然,使用long long也是

C語言大數運算-乘除法篇

前言: 這是第三篇部落格,也是一次介紹二個計算的部落格,可能難度會比前兩篇部落格大一點,所以建議對於初學者來說一定要看完我的前兩篇部落格再來看本篇部落格,關於本次實驗的環境,和思想在第一篇部落格已經簡單介紹過了,所以不再贅述,我會先介紹大數的乘法載介紹大數的除

C語言大數問題

關於大數學習的一些小思路:    (    本文以大數整數加法為例)        從小學開始我們就一直在學習加減乘除,很多場合下我們都能夠運用自如,並且理論上如果我們休息充足,材料充足而且大腦不短路,手速快的情況下,我們可以算出來任意長度的兩個數字的加減乘除的結果,但是畢竟

C語言求10個數中的最大數

#include <stdio.h> int main() { int max; int a[10]={1,20,3,4,5,6,7,8,9,10}; max=a[0]; for(int i=1;i<10;i++)  { &

c語言大數乘法各位相加問題

#include<stdio.h> #include<string.h> void cal(int n); int main() {char a[100],b[100];int x[100],y[100],c[100],i,j,z,d,k,sum,m,n;scanf("%s",&

大整數的四則運算(C語言實現)(2)——大整數的加法和減法運算

斷斷續續調了好久個演算法的程式碼終於除錯好了,廢話不多說了,直接說思路,然後上程式碼。上一篇文章介紹了大整數的輸入的處理,包括接收方式、儲存方式、前導零的處理等內容。本文接著上一篇的內容。簡述大整數加減運算的思路。首先對於加法運算,存在以下四種情況:             

C語言大數相乘問題普通演算法->acm.scu.edu.cn:1002

問題描述: Calculate A × B Input The input will consist of a series of pairs of integers a and b, separa

使用C++類實現大數加法,大數減法大數乘法

這寫的就是垃圾,多數還是抄的,沒有意思,為了應付作業啥的可以拿去試試,好多東西都算不對。希望後面看到的能自己寫,不然以後還要像我一樣,重新寫一遍。 效果截圖: #include <iostream> #include <string&g