Sky数
题目来源:点击打开链接
题目分析:这道题就是利用栈“后进先出”的特点解决数制转换的问题。《数据结构》(c语言版的)第48页也有相关的介绍。
数制转换的算法原理:十进制数 N 和其他 d 进制的转换
N=(N div d) x d + N mod d (其中:div 为整除运算,mod 为求余运算)
比较简单,直接看代码;
源代码:
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
int Sky(int n,int m)
{
stack<int>S;
int sum=0;
while(n)
{
S.push(n%m); //将余数进栈
n/=m; //整除
}
while(!S.empty())
{
sum+=S.top();
S.pop(); //余数出栈
}
return sum;
}
int main()
{
int n;
while(scanf("%d",&n),n)
{
if(Sky(n,10)==Sky(n,16)&&Sky(n,16)==Sky(n,12))
printf("%d is a Sky Number.\n",n);
else
printf("%d is not a Sky Number.\n",n);
}
return 0;
}