作者:小代码
题目:
- 题目描述:
-
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
- 输入:
-
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
- 输出:
-
请计算A+B的结果,并以正常形式输出,每组数据占一行。
- 样例输入:
-
-234,567,890 123,456,789 1,234 2,345,678
- 样例输出:
-
-111111101 2346912
C语言通过版:
流程图:
主函数:
toNum()函数:
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int main( void ) { int MyPow( int x );//返回10的x次方的值 void toNum( int *num, char *IN );//把接收的字符串转换为数字 char *A = (char*)malloc(sizeof(char)*15);//保存每一组输入的第一个数字 char *B = (char*)malloc(sizeof(char)*15);//保存每一组输入的第二个数字 int aOut;//保存转换后的第一个数字 int bOut;//保存转换厚的第二个数字 int *a; int *b; a = &aOut; b = &bOut; while( EOF != scanf("%s%s",A,B) ) { toNum( a, A );//转换第一个数字 toNum( b, B );//转换第二个数字 printf("%d\n",aOut+bOut);//输出和 } return 0; } //返回10的x次方的值 int MyPow( int x ) { if( 0 == x ) { return 1; } else { double y = (double)x; return (int)pow( 10, y ); } } //把接收的字符串转换为数字 void toNum( int *num, char *IN ) { int blog = 1;//控制转换后整数的符号,默认为正 int i; int mi = 0;//转换为整数时的指数 int di;//转换为整数时的底数 int len = strlen( IN );//保存字符串长度 *num = 0;//初始化整数 if( '-' == *( IN + 0 ))//如果第一个字符是‘-’,则改为负 { blog = -1; } for( i = len; i >= 0; i-- )//如果字符的ASCII码是48到57之间,则转换 { if( 48 <= *( IN + i ) && *( IN + i ) <= 57 ) { di = *( IN + i ) - 48; *num = *num + di * MyPow( mi ); //printf("\nnum = %d\n",*num); mi++; } } *num = (*num) * blog;//还原符号 }
JAVA未通过版:
话说这个程序比C要简洁多了,但是OJ提示 runtimer error,只好放弃这种方法了。不过我还是要保存下来,毕竟刷OJ不是目的
import java.util.*; public class Main { public static void main( String[] args) { Scanner cin = new Scanner(System.in); String A;//保存第一个字符串 String B;//保存第二个字符串 int a;//保存第一个整数 int b;//保存第二个整数 while( cin.hasNext() ) { A = cin.next();//接收 B = cin.next();//接收 a = Integer.parseInt( A );//转换 b = Integer.parseInt( B );//转换 System.out.println( a + b );//输出 } } }
JAVA通过版(这个实在没什么意思):
import java.util.*; import java.lang.*; public class Main { public static void main( String[] args) { Scanner cin = new Scanner(System.in); String A;//保存第一个字符串 String B;//保存第二个字符串 int a = -1;//保存第一个整数 int b = -1;//保存第二个整数 while( cin.hasNext() ) { A = cin.next();//接收 B = cin.next();//接收 a = zhuan( A ); b = zhuan( B ); System.out.println( a + b ); } } public static int zhuan( String A ) { int len = A.length();//保存字符串长度 int i; int k = 0;//转换指数控制 int di;//转换底数控制 int num = 0;//保存值 int blog = 1;//保存符号 if( 45 == A.charAt( 0 ) ) { blog = -1; } for( i = len - 1; i >= 0; i-- ) { if( 48 <= A.charAt(i) && A.charAt(i) <= 57 ) { di = A.charAt(i) - 48; num = (int)( num + di * Math.pow(10.0,k)); k++; } } num = num * blog;//回复符号 return num; } }