123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0
370370367037037036703703703670
我们来看看数据:
bool型为布尔型,占1个字节,取值0或1。
BOOL型为int型,一般认为占4个字节,取值TRUE/FALSE/ERROR。
sbyte型为有符号8位整数,占1个字节,取值范围在128~127之间。
bytet型为无符号16位整数,占2个字节,取值范围在0~255之间。
short型为有符号16位整数,占2个字节,取值范围在-32,768~32,767之间。
ushort型为无符号16位整数,占2个字节,取值范围在0~65,535之间。
int型为有符号32位整数,占4个字节,取值范围在-2,147,483,648~2,147,483,647之间。
uint型为无符号32位整数,占4个字节,取值范围在0~4,294,967,295之间。
long型为64位有符号整数,占8个字节,取值范围在9,223,372,036,854,775,808~9,223,372,036,854,775,807之间。
ulong型为64位无符号整数,占8个字节,取值范围在0~18,446,744,073,709,551,615之间。
float型为32位单精度实数,占4个字节,取值范围3.4E+10的负38次方~3.4E+10的38次方之间。
double型为64位实数,占8个字节,取值范围1.7E+10的负308次方~1.7E+10的正308次方。
1 int num1[MAX],num2[MAX]; 2 void Add(char a[],char b[]){ 3 int i,j,len1,len2,max; 4 memset(num1,0,sizeof(num1)); 5 memset(num2,0,sizeof(num2)); 6 len1 = strlen(a); 7 len2 = strlen(b); 8 //获得最长数组的长度 9 //两数相加最多不会超过最大数的位数+1,减少循环次数 10 max = len1 > len2 ? len1 : len2; 11 //将两字符串数组转换为数字数组 12 for(i = len1 - 1,j = 0;i >= 0;i--){ 13 num1[j++] = a[i] - '0'; 14 } 15 for(i = len2 - 1,j = 0;i >= 0;i--){ 16 num2[j++] = b[i] - '0'; 17 } 18 //模拟进位运算 19 for(i = 0;i <= max;i++){ 20 num1[i] += num2[i]; 21 if(num1[i] > 9){ 22 num1[i] -= 10; 23 num1[i + 1] ++; 24 } 25 } 26 //输出 27 int ac = 0; 28 for(i = max;i >= 0;i--){//输出排除0 29 if(num1[i] != 0) 30 ac = 1; 31 if(ac){ 32 printf("%d",num1[i]); 33 } 34 } 35 }
1 //POJ-1503-1 2 #include <cstdio> 3 #include <cstring> 4 const int MAXN = 200; 5 int main() 6 { 7 char s[MAXN]; 8 int i, j; 9 int m; 10 scanf("%d",&m); 11 while(m--){ 12 int sum[MAXN] = {0}; 13 while(gets(s)) 14 { 15 int len = strlen(s); 16 if(s[0] == '0' && len == 1) 17 break; 18 //sum[]保存所有组的各位的和 19 for(i = 110, j = len-1; j >= 0; i--, j--) 20 { 21 sum[i] += s[j]-'0'; 22 } 23 } 24 //将sum[]每个元素,进行进位 25 for(i = 110; i > 0; i--) 26 { 27 sum[i-1] += sum[i] / 10; 28 sum[i] %= 10; 29 } 30 //排除和为0的情况 31 for(i = 0; sum[i] == 0 && i < 111; i++) 32 { 33 if(i == 111)//意味着全为零 34 { 35 printf("0\n"); 36 } 37 } 38 for( ; i < 111; i++) 39 { 40 printf("%d",sum[i]); 41 } 42 printf("\n\n"); 43 } 44 return 0; 45 }
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
A,B must be positive.
2 1 2 112233445566778899 998877665544332211
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
1 //NYOJ-103 2 #include<cstdio> 3 #include<cstring> 4 const int MAX = 1002; 5 char str1[MAX],str2[MAX]; 6 int num1[MAX],num2[MAX]; 7 void Add(char a[],char b[]){ 8 int i,j,len1,len2,max; 9 memset(num1,0,sizeof(num1)); 10 memset(num2,0,sizeof(num2)); 11 len1 = strlen(a); 12 len2 = strlen(b); 13 //获得最长数组的长度 14 //两数相加最多不会超过最大数的位数+1,减少循环次数 15 max = len1 > len2 ? len1 : len2; 16 //将两字符串数组转换为数字数组 17 for(i = len1 - 1,j = 0;i >= 0;i--){ 18 num1[j++] = a[i] - '0'; 19 } 20 for(i = len2 - 1,j = 0;i >= 0;i--){ 21 num2[j++] = b[i] - '0'; 22 } 23 //模拟进位运算 24 for(i = 0;i <= max;i++){ 25 num1[i] += num2[i]; 26 if(num1[i] > 9){ 27 num1[i] -= 10; 28 num1[i + 1] ++; 29 } 30 } 31 //输出 32 int ac = 0; 33 for(i = max;i >= 0;i--){//输出排除0 34 if(num1[i] != 0) 35 ac = 1; 36 if(ac){ 37 printf("%d",num1[i]); 38 } 39 } 40 } 41 int main(){ 42 int n,i = 1; 43 scanf("%d",&n); 44 while(n--){ 45 scanf("%s %s",str1,str2); 46 printf("Case %d:\n%s + %s = ",i,str1,str2); 47 if(str1[0] == '0' && str2[0] == '0'){ 48 printf("0\n"); 49 }else{ 50 Add(str1,str2); 51 printf("\n"); 52 } 53 i++; 54 } 55 return 0; 56 }