标签:request char* mis 结束 对象 结果 iostream ring 防止
1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 using namespace std; 5 int main(void) 6 { 7 int n; 8 int temp; 9 char* arr = new char[9]; //要给‘\0’留一位 10 cin >> arr; 11 n = strlen(arr); //计算字符串长度 12 long long sum = 0; //用long long防止结果过大 13 for (int i = 0; arr[i]!=‘\0‘; i++) //最后一位是‘\0‘,不用算进去 14 { 15 switch (arr[i]) 16 { 17 case ‘A‘: temp = 10; break; 18 case ‘B‘: temp = 11; break; 19 case ‘C‘: temp = 12; break; 20 case ‘D‘: temp = 13; break; 21 case ‘E‘: temp = 14; break; 22 case ‘F‘: temp = 15; break; 23 default: temp = arr[i] - ‘0‘; break; 24 } 25 sum = sum + temp * pow(16, n - 1- i); 26 } 27 cout << sum; 28 return 0; 29 }
注意问题:(1)题目要求不超过8位,也就是说最大可为8位,但是还要考虑字符串数组最后一位必须是‘\0‘,所以创建数组的时候是char[9]而不是char[8]
(2)最后10进制结果用long long而不用int是为了防止结果过大溢出无法表示
(3)关于字符串计数的问题:strlen函数求出的字符串长度是有效长度,是不包含末尾的‘\0‘的,所以在最后求sum的值的时候,用n-1-i而不是减2
补充:
标签:request char* mis 结束 对象 结果 iostream ring 防止
原文地址:https://www.cnblogs.com/guanrongda-KagaSakura/p/12460657.html