欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 2024年10月16日练习

2024年10月16日练习

2024/10/26 0:26:59 来源:https://blog.csdn.net/2301_81154519/article/details/142989269  浏览:    关键词:2024年10月16日练习

一.回文数:

思路一:

负数肯定就不是回文数了,所以负数就直接返回flase,正数的话就一位位分解,然后构成一个

新的整数,然后去判断两者是否相等即可:

bool isPalindrome(int x) {if (x<0){return false;        }int tmp=x;long long overturn=0;while(tmp){overturn+=tmp%10;tmp/=10;overturn*=10;}overturn/=10;if(overturn==x){return true;}elsereturn false;
}

这里要注意两点一点就是类型要用长整形,因为如果输入的数过大,用int 去接受就会造成数据溢

出,第二点就是循环结束后,新的整数要/10,因为循环多循环了一次,就多了个0。

思路二:

利用sprintf函数将这个整形x写入到一个字符串中,然后再利用strlen求长度,从结尾和头去比较即

可。

bool isPalindrome(int x) {char *str=(char*)malloc(sizeof(x)*64);if(x<0){return false;}if(x>=0){sprintf(str,"%d",x);int len=strlen(str);for(int i=0;i<len/2;i++){if(str[i]!=str[len-i-1]){return false;}}}return true;
}

这里的小问题就是空间要开的大一点,要不然不够存储就会报错溢出。

二. 罗马数字转整数:

我们学过枚举,就是将一些字符改成数字。

所以我们这里利用枚举将所有的罗马数字变成阿拉伯数字,这样就更加方便,再利用switch case

语句去分析每一个存进字符串的字符然后根据情况再去进入不同的语句也就是不同的情况:

enum luoma{I=1,V=5,X=10,             L=50,            C=100,            D=500,            M=1000           
};
int romanToInt(char* s) {int len = strlen(s);int idx = 0, sum = 0;while(idx < len){switch(s[idx]){case 'I': if(s[idx + 1] == 'V'){sum += 4; idx++;}else if(s[idx + 1] == 'X'){sum += 9; idx++;}else{sum += I;}break;case 'V': sum+= V; break;case 'X': if(s[idx + 1] == 'L'){sum += 40; idx++;}else if(s[idx + 1] == 'C'){sum +=90; idx++;}else{sum += X;}break;case 'L': sum+= L; break;case 'C': if(s[idx + 1] == 'D'){sum += 400; idx++;}else if(s[idx + 1] == 'M'){sum += 900; idx++;}else{sum += C;}break;case 'D': sum+= D; break;case 'M': sum+= M; break;default: return -1;}idx++;}return sum;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com