PAT程式設計練習——甲級1001(標準格式化數字)
阿新 • • 發佈:2018-12-23
翻譯題目要求:
計算出兩個整數的和並將結果標準化——以三位數為單位用,逗號分割,如不超過三位,則無逗號分隔。仿照國際化的數字顯示標準。
輸入:-1000000 9
輸出:-999,991
目前想到一個辦法(C++程式碼):
#include <stdio.h> #include <stdlib.h> #include <string.h> char cResult[10] = {0}; int pos = 0; char* add(long a, long b) { long result = a + b; if( result < 0 ) { strcat( cResult, "-"); pos = 1; } result = abs(result); // 對負數保留符號後,就轉為絕對值使用 int top = result / 1000000; if( top > 0 ) { sprintf( cResult + pos, "%d,", top ); pos = strlen(cResult); } top = result % 1000000; top = top / 1000; if( top > 0 || pos > 1 ) { if ( pos > 1 ) // 存在高位,就要補0,佔滿位數 sprintf( cResult + pos, "%03d,", top ); else // 不存在高位,不需要補0 sprintf( cResult + pos, "%d,", top ); pos = strlen(cResult); } top = result % 1000; if( top > 0 || pos > 1 ) { if( pos > 1 ) // 高位補0同理 sprintf( cResult + pos, "%03d", top ); else sprintf( cResult + pos, "%d", top ); pos = strlen(cResult); } if( pos == 0 ) //如果結果為0,需要特殊補0,否則結果為空 strcat( cResult, "0"); return cResult; } int main () { printf("Please input 2 digits:\n"); long a, b; scanf("%ld %ld",&a,&b); printf("the result is :%s\n",add(a, b)); return 0; }
Python程式碼實現如下:
def _main(): a,b = raw_input("please input the digit a and b\n").split(' ') a=int(a) b=int(b) print("the input",a,b) calc(a,b) def calc(a,b): str_result = "" pos = 0 result = a+b if( result < 0 ): str_result += '-' pos = 1 result = abs(result) top = result / 1000000 if( top > 0 ): str_result += str(top) str_result += ',' pos = len(str_result) top = result % 1000000 top = top / 1000 if( top > 0 or pos > 1 ): str_result += str(top) str_result += ',' pos = len(str_result) top = result % 1000 if( top > 0 or pos > 1 ): str_result += str(top) pos = len(str_result) if( pos is 0 ): str_result += '0' print("result:",str_result) _main()
正在思考是否有更好的方法