兩個超大整數相加(c++)
昨天面試有個題,時間太緊,來不及寫了,回家除錯一下:
函式原型 bool add(const char *A, const char *B, char * dest);
思路: 模擬人工加法的過程,先從末尾開始加。如果存在進位,則標記
#include <iostream>
using namespace std;
bool add(const char *A, const char *B, char * dest)
{
if(NULL == A || NULL == B || NULL == dest)
{
return false;
}
int iLenA = strlen(A);
int iLenB = strlen(B);
const char *pBTail = (B+iLenB-1);
const char *pATail = (A+iLenA-1);
bool bIsNeed = false; //標記是否需要進位
int iMaxLen = (iLenB>iLenA?iLenB:iLenA);
char *ret = new char[iMaxLen+2];
memset(ret,0,iMaxLen+2);
const char *head = ret;
for(;iLenA>=0||iLenB>=0;iLenA--,iLenB--,pBTail--,pATail--)
{
char c1 = *pATail;
char c2 = *pBTail;
// 如果位數不夠,則用'0'替換
if(iLenA<=0)
{
c1 = '0';
}
if(iLenB<=0)
{
c2 = '0';
}
char temp = c1 + c2
- '0' + (bIsNeed==true?1:0);
if(temp > '9')
{
bIsNeed = true;
temp -= 10;
}
if(iLenA<=0 && iLenB<=0 && temp == '0')
{
break;
}
*ret = temp;
ret++;
}
//將字串反轉儲存
int len = strlen(head);
dest[len] = '\0';
char *pTail = (dest + len - 1);
while(*head != '\0')
{
*(pTail--) = *(head++);
}
return true;
}
void main()
{
char *a = "99999999999999999999990";
char *b = "11";
char *c = new char[50];
memset(c,0,10);
add(a,b,c);
cout<<c;
}
測試用例:
a '9999999999990' ,b '11'
a '0',b '1199999000'
a '0',b '0'
a '555555',b '555555'
a '1',b '999999999999999999'
a '9',b '9'
相關推薦
兩個超大整數相加(c++)
昨天面試有個題,時間太緊,來不及寫了,回家除錯一下: 函式原型 bool add(const char *A, const char *B, char * dest); 思路: 模擬人工加法的過程,先從末尾開始加。如果存在進位,則標記 #include <iostre
兩個超大整數相加
用字串處理數值運算 總體思想:按照小學算術運算計算,按位運算從陣列最高位,一個個的取出來相加(當然的先把單個字元轉換為整型),記住進位,迴圈計算 需要做的事情: (1)判斷輸入的字串是否為數字(特別要考慮小數點,如果做除法,被除數不能為0) (2)
兩個超大數相加演算法
#include <stdio.h> #include <string.h> #include <stdlib.h> /*********************
C++實現兩個超大的字符數字相加的算法的代碼
numbers lead last let rst ace num cout -i 如下資料是關於C++實現兩個超大的字符數字相加的算法的代碼。 #include <iostream> #include <string> #include <s
C++實現兩個超大的字元數字相加的演算法的程式碼
如下資料是關於C++實現兩個超大的字元數字相加的演算法的程式碼。 #include <iostream> #include <string> #include <stack> using namespace std; void deleteLeadingZeros(st
C語言例項—輸入兩個正整數m和n,求其最大公約數和最小公倍數(gcc 編譯)。
1.輾轉相除法 輾轉相除法是古希臘求兩個正整數的最大公約數的,也叫歐幾里德演算法,其方法是用較大的數除以較小的數,上面較小的除數和得出的餘數構成新的一對數,繼續做上面的除法,直到出現能夠整除的兩個數,其中較小的數(即除數)就是最大公約數。以求288和123的最大公約數為例,操作如下: 288÷1
C#兩個連結串列相加求和
您將獲得兩個非空連結串列,表示兩個非負整數。 數字以相反的順序儲存,每個節點包含一個數字。 新增兩個數字並將其作為連結列表返回。 您可以假設這兩個數字不包含任何前導零,除了數字0本身。 Input: (2 -> 4 -> 3) + (5 -> 6 ->
C語言例子(3)之求兩個正整數的最大公約數及最小公倍數
# include <stdio.h> void main() { int x, y, num1, num2, temp; printf("請輸入兩個正整數:\n"); scanf("%d %d", &num1, &num2); if(num1 <
輸入兩個正整數m和n,求其最大公約數和最小公倍數 C/C++
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 1.程式分析:利用輾除法。 2.程式原始碼: #include <stdio.h> int main() { int a,b,num1,num2,temp; printf("請輸入2個正整數:\
c語言:輸入兩個正整數m和n,求其最大公約數和最小公倍數
輸入兩個正整數m和n,求其最大公約數和最小公倍數。解:程式:#include <stdio.h>int main(){int num1, num2, t,p;printf("請輸入兩個正整數
(c++)輸入兩個正整數m和n,求其最大公約數和最小公倍數。
#include<iostream> using namespace std; int main() {int m,n,i,j,a;cin>>m>>n;j=m*n;
C語言例項12——輸入兩個正整數m和n,求其最大公約數和最小公倍數。
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 //程式分析:利用輾除法。 #include<stdio.h> int main(){ int a,b,num1,num2,te
C語言實現只用加法和減法實現兩個正整數的乘除運算
1、乘法a*b如下 #include<stdlib.h> #include<stdio.h> int main() { int a,b; int i,result=0; scanf("%d%d",a,b); for(
C語言計算兩個正整數的最大公約數與最大公倍數
先給出原始碼,下面解釋。 <span style="background-color: rgb(255, 255, 255);"><span style="font-size:18px;color:#ff0000;">#include <s
SDUT 3503 有兩個正整數,求N!的K進制的位數
pos class 進制 amp code cpp ref clu lan 有兩個正整數,求N!的K進制的位數 題目鏈接:action=showproblem&problemid=3503">http://sdutacm.org/sdutoj/prob
計算任意兩個個位整數之間所能組成的奇數個數
lac .com logs onclick 判斷 document com 編寫 htm <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>&
求兩個正整數的最大公約數和最小公倍數
公倍數 最大 sys static () 一個 AR ati scanner import java.util.Scanner;public class Gyb { public static void main(String[] args) {
Add Two Numbers 兩個連結串列相加 python
描述: You are given two linked lists representing two non-negative numbers. The digits are stored in reverseorder and each of their nodes contain a si
Java中兩個byte型別相加結果賦值給byte型別的變數會報編譯錯誤,byte加byte的結果為什麼是int?
背景: 之前偶然看到有討論這個問題,在網上搜了半天,結果都不盡如人意,解釋沒有到位, 有的說byte加byte預設就是int,那為什麼這麼做呢? 這不是找麻煩麼?這種奇怪的預設還有哪些?帶來一些列疑問。。。。。。 有的說byte儲存的就是整型資料,這種說法的對錯姑且不論,至少我覺得難免有
【面試題】Java 2個(多個)大整數相加如何實現
之前面試阿里的時候,第四面的時候面試官讓我當他面實現這個題目, 一開始的時候問的時候 2個相加如何實現,然後我寫完了之後又問我如果是多個相加呢?面試官希望我能在實現的時候能夠考慮到各種可能性,比如多個數相加,然後等我寫完了之後,又問我有沒有更好的實現方法;以下是我的實現方法; 將待相加