PAT程序设计题目——甲级1001(国际标准格式化数字)

题目原文链接是:http://www.patest.cn/contests/pat-a-practise/1001

翻译题目要求如下:

计算出两个整数的和并将结果标准化——以三位数为单位用,逗号分割,如不超过三位,则无逗号分隔。仿照国际化的数字显示标准。

输入:-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()  

大家给些参考意见,谢谢!  

 

posted @ 2016-03-10 23:18  _依彩帆  阅读(70)  评论(0编辑  收藏  举报