我正在尝试制作一个C程序,该程序确定5位整数是否是回文。我苦苦挣扎的部分没有使用循环,因为我知道如何使用循环。但是,我应该不使用它,而是使用嵌套的if语句。我已经弄清楚了如何反转3位数字而不是5位,然后从那里继续。这是我到目前为止所拥有的。我只是在学习,所以也很难。
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, e , num, reversed;
cout << "\n Enter a five digit number";
cin >> num;
a = num / 100;
b = (num % 100) / 10;
c = num % 10;
d = num % 10;
e = num % 10;
reversed = 100 * c + 10 * b + a;
cout << " " << reversed;
return 0;
}
再次,我不能让它工作5位数字,但我假设在那之后使用if else语句,我可以将其反转,并将原始数字与%相关联,以查看它是否是回文。
答案 0 :(得分:1)
num = numInput;
a = num % 10; num /= 10;
b = num % 10; num /= 10;
c = num % 10; num /= 10;
d = num % 10; num /= 10;
e = num % 10;
reversed = ((((( a * 10) + b ) * 10 + c ) * 10 + d ) * 10 ) + e;
isPalindrome = ( (numInput == reversed) ? 1 : 0 );
或者,如果您希望代码的某些“对称性”(绝对不需要):
rev = 0;
rev += a; rev *= 10;
rev += b; rev *= 10;
rev += c; rev *= 10;
rev += d; rev *= 10;
rev += e;
但是使用循环会更好。
答案 1 :(得分:0)
这是因为在这些语句中,您的变量num
没有做任何更改:
c = num % 10;
d = num % 10;
e = num % 10;
您根本没有更新num
,因此变量c
,d
和e
的值相同。因此,在取一模数之后,您还应该将num
变量除以10,以将一位向后移。
a = num % 10; // get the last digit of num
num /= 10; // update the last digit (num reduced by 1 digit, '12345' will become '1234')
b = num % 10;
num /= 10;
c = num % 10;
num /= 10;
d = num % 10;
num /= 10;
e = num % 10;
cout << a << b << c << d << e << endl;
由于您仅在代码中打印反转的数字,因此无需再次构造反转的数字。但是,如果您这样做了,那么一旦有了数字,它就变得微不足道了。
reversed = 10000 * a + 1000 * b + 100 * c + 10 * d + e;
我相信您可以从此处(isPalindrome = (reversed == num)
开始检查该数字是否是回文。
答案 2 :(得分:0)
如果您想使解决方案变得聪明,则必须使用循环。而且,如果要使解决方案具有通用性,则应使用指针(通过几次更改,您可以使回文检查适应任何单词/短语,因为回文不是仅是数字) 。像这样的东西:
#include <iostream>
#include <sstream>
#include <cstring>
using namespace std;
int main()
{
unsigned long long int num;
cout << "\n Enter integer:\n";
cin >> num;
std::stringstream ss;
ss << num;
const char * itss = ss.str().c_str();
const char * ites = itss + strlen(itss) - 1;
int is_palindrome = 1;
while (itss <= ites) {
if (*itss != *ites) {
is_palindrome = 0;
break;
}
itss++;
ites--;
}
cout << "your number is " << (is_palindrome ? "a palindrome" : "NOT a palindrome") << "\n";
return 0;
}
答案 3 :(得分:0)
int main(){
int n,m,d,s=0;
scanf("%d",&n);
m=n;
while(m!=0){
d=m%10;
s=(s*10)+d;
m=m/10;
}
if(r==n){
printf("%d is palindrome",n);
}else{
printf ("%d is not palindrome",n);
}
}
只需遵循简单的数字提取算法,即可轻松解决回文,求逆,数字总和等所有程序。