文章目录
- 特殊的回文数
- 回文数
- 水仙花数
- 十六进制转八进制_n次
特殊的回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
解题思路
1.将数字转化为字符串,判断这个字符串是否为回文串
2.将数字进行逆转,然后判断与原数字是否相等
3.将数字的一半进行逆转没然后判断是否与原串是否相同。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;int palindromicNumber(int pn)
{string tmp = to_string(pn);string reverse_tmp(tmp);reverse(reverse_tmp.begin(), reverse_tmp.end());if (tmp == reverse_tmp){return 1;}else{return 0;}
}int main()
{int n = 0;cin >> n;for (int i = 10000; i <= 999999; i++){if (palindromicNumber(i)){int tmp = i;int sum = 0;while (tmp){sum = sum + tmp % 10;tmp /= 10;}if (sum == n){cout << i << endl;}}}return 0;
}
回文数
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;//将数字转为字符串,之后将字符串进行逆转,然后判断两个字符串是否相同 int palindromicNumber(int pn)
{string tmp;while(pn){tmp.insert(0,1,(pn%10) + '0');pn/=10;}string reverse_tmp(tmp);reverse(reverse_tmp.begin(),reverse_tmp.end());if(reverse_tmp == tmp){return 1;}else{return 0;}
}int main()
{int i;for(i = 1000;i<= 9999;i++){if(palindromicNumber(i)){cout << i << endl;}}return 0;
}
水仙花数
问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。
#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
using namespace std;int sameSum(int n)
{int sum = 0;int tmp = n;while(n){sum = sum + pow(n%10,3);n/=10;}if(tmp == sum){return 1;}else{return 0;}
}int main()
{int i;for(i=100;i<=999;i++){if(sameSum(i)){cout << i << endl;}}return 0;
}
十六进制转八进制_n次
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
#include<iostream>
#include<string>
#include<math.h>
using namespace std;//十六进制转十进制
int hexToDec(string hex)
{int dec = 0;int pows = 0;for (int i = hex.length() - 1; i >= 0; i--){char c = hex[i];if (c >= '0' && c <= '9'){dec = (c - '0') * pow(16, pows) + dec;}else{dec = (c - 'A' + 10) * pow(16, pows) + dec;}pows++;}return dec;
}//十进制转八进制
int decToOct(int dec)
{int oct = 0;int i = 1;while (dec){oct = oct + dec % 8 * i;dec = dec / 8;i *= 10;}return oct;
}int main()
{int count = 0;cin >> count;string hex[10];for (int i = 0; i < count; i++){cin >> hex[i];}for (int i = 0; i < count; i++){int tmp = hexToDec(hex[i]);cout << decToOct(tmp) << endl;}return 0;
}