華為 題目大資料計算機

來源:互聯網
上載者:User

標籤:

2.大數加減

 

問題描述:

 

在電腦中,由於處理器位寬限制,只能處理有限精度的十進位整數加減法,比如在32位寬處理器電腦中,參與運算的運算元和結果必須在-231~231-1之間。如果需要進行更大範圍的十進位整數加法,需要使用特殊的方式實現,比如使用字串儲存運算元和結果,採取逐位元運算的方式。如下:

 

9876543210 + 1234567890 = ?

 

讓字串 num1="9876543210",字串 num2="1234567890",結果儲存在字串 result = "11111111100"。

 

-9876543210 + (-1234567890) = ?

 

讓字串 num1="-9876543210",字串 num2="-1234567890",結果儲存在字串 result = "-11111111100"。

 

要求編程實現上述高精度的十進位加法。

 

要求實現函數:

 

void add (const char *num1, const char *num2, char *result)

 

【輸入】num1:字串形式運算元1,如果運算元為負,則num1[0]為符號位‘-‘;num2:字串形式運算元2,如果運算元為負,則num2[0]為符號位‘-‘

 

【輸出】result:儲存加法計算結果字串,如果結果為負,則result[0]為符號位。

 

註:

 

I、 當輸入為正數時,‘+‘不會出現在輸入字串中;當輸入為負數時,‘-‘會出現在輸入字串中,且一定在輸入字串最左邊位置;

 

II、輸入字串所有位均代表有效數字,即不存在由‘0‘開始的輸入字串,比如"0012", "-0012"不會出現;

 

III、要求輸出字串所有位均為有效數字,結果為正或0時‘+‘不出現在輸出字串,結果為負時輸出字串最左邊位置為‘-‘。

樣本

輸入:num1 = "580"

num2 = "-50"

輸出:result = "530"

輸入:num1 = "580"

 

num2 = "-600"

 

輸出:result = "-20"

 

#include <stdio.h>#include <string.h>//【輸入】num1:字串形式運算元1,如果運算元為負,則num1[0]為符號位‘-‘;num2:字串形式運算元2,如果運算元為負,則num2[0]為符號位‘-‘ 【輸出】result:儲存加法計算結果字串,如果結果為負,則result[0]為符號位。 void change(char * str){int num =strlen(str);int i ;int tmp;for(i = 0;i <= (num/2 -1 ); i++){tmp = str[i];str[i] = str[num - i -1];str[num -1 -i] = tmp;} }void jinwei(char *str){int num = strlen(str);if(str[num-1] !=‘-‘){for(int i = 0;i<num;i++ ){if(str[i] >= 0x3a){str[i+1]++;str[i]= str[i] - 10;if(i == num-1){str[i+1] = ‘1‘;}}}}else{for(int i = 0;i<num-1;i++ ){if(str[i] >= 0x3a){str[i+1]++;str[i]= str[i] - 10;if(i == num-2){str[i+1] = ‘1‘;str[i+2] = ‘-‘;}}}}} void jinwei2(char *str){int num = strlen(str);for(int  i =0;i<num-1;i++){if(str[i]<0x30){str[i+1]--;str[i]=str[i]+10;}}}void add ( const char *num1,const char *num2, char *result){char num11[50] ="";char num22[50] ="";strcpy(num11,num1);strcpy(num22,num2);change(num11);change(num22);int i1 = strlen(num11);int i2 = strlen(num22);int imin ;int  i;int flag;int t;if(num1[0] !=‘-‘ && num2[0] !=‘-‘){i1 >= i2 ? (imin = i2 ) : (imin = i1);//得到加數字中字串較小的 i1 >= i2 ? (flag = 2) : (flag = 1);  //標誌位 哪一個是較小的字串 for(i=0;i<imin;i++){result[i] = num11[i] + num22[i] - 0x30;}if(flag == 2)for(;i<i1;i++)result[i] = num11[i];else if(flag == 1)for(;i<i2;i++)result[i] = num22[i];} if(num1[0] ==‘-‘ && num2[0] ==‘-‘){i1 >= i2 ? (imin = i2 ) : (imin = i1);//得到加數字中字串較小的 i1 >= i2 ? (flag = 2) : (flag = 1);  //標誌位 哪一個是較小的字串 for(i=0;i<imin-1;i++){result[i] = num11[i] + num22[i] - 0x30;}if(flag == 2)for(;i<i1;i++)result[i] = num11[i];else if(flag == 1)for(;i<i2;i++)result[i] = num22[i];} if(num1[0] !=‘-‘ && num2[0] ==‘-‘){change(num11);change(num22);flag = strcmp(num11,(num22+1));if(flag > 0)//正數大於負數{change(num11);change(num22);for(i =0;i< i1;i++){if(i<i2-1)result[i] = num11[i] - num22[i] + ‘0‘;elseresult[i] = num11[i];} } if(flag < 0)//正數小於負數{change(num11);change(num22);for(i = 0;i<i2;i++){if(i<i1)result[i] = num22[i] - num11[i] + ‘0‘; elseresult[i] = num22[i] ; }} if(flag == 0)result[0] = ‘0‘;}if(num1[0] ==‘-‘ && num2[0] !=‘-‘){change(num11);change(num22);flag = strcmp((num11+1),num22);if(flag > 0)//正數xiao於負數{change(num11);change(num22);for(i = 0;i<i1;i++){if(i<i2)result[i] = num11[i] - num22[i] + ‘0‘; elseresult[i] = num11[i]; }} if(flag < 0)//正數da於負數{change(num11);change(num22);for(i =0;i< i2;i++){if(i<i1-1)result[i] = num22[i] - num11[i] + ‘0‘;elseresult[i] = num22[i]  ;} } if(flag == 0)result[0] = ‘0‘;}}void qianyi(char *str){int i =0;for(i = 1;i<strlen(str);i++){str[i-1] = str[i];}}void xianshi(char *str){int  i;if(str[0] == ‘-‘)for(i = 1;i<strlen(str);){if(str[i] == ‘0‘){qianyi((str+i));str[strlen(str)-1] = ‘\0‘;}elsebreak ;}elsefor(i = 0;i<strlen(str);i++){if(str[i] == ‘0‘)qianyi((str+i));elsebreak ;}}int main(){char  a1[] = "580";char a2[] = "-600";char a3[50] = "";//char a3[] ; add(a1,a2,a3); //change(a1); if(a1[0]!=a2[0]) jinwei2(a3);elsejinwei(a3); change(a3); xianshi(a3);printf("%s",a3);}

  

華為 題目大資料計算機

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.