第一次发帖,提供一个不同的思路(可AC)

P1307 [NOIP2011 普及组] 数字反转

小初初i @ 2017-10-13 23:23:40

将每一位单独拆分,在分别乘上10^n(第一位变最后一位,……)

#include<iostream>
#include<cmath>//用pow函数 
using namespace std;
int main()
{
    int d=0,e=0;
    int k[100],c=0;//k用来储存num的每一位,
    //c为k数组内的数字,在下面存数时用到 
    long long int num,numm=0;//numm在后面储存翻转数字 
    int x=10,y=0;//在下面用pow函数求输入数字的位数 
    cin>>num;
     long long int nummm=num;//最后用来添负号 
    if(num<0)
        num/=-1;//数字小于零则变为正 
    while(num>pow(x,y))
    {
        pow(x,y++);//y代表数字的位数 
    }
    while(num>0)
    {
        k[c]=num%10,num/=10,++c;//将数字的每一位模上10得到每一位的数字 
    }
    double f=pow(10,d);
    c-=1;//c-=1否则会溢出 
    while(c>=0&&d<y)
    {
        numm+=k[c]*f,c--,f=pow(10,++d);//在这里反转数字
    }
    if(nummm<0)
        numm/=-1;//判号 
    cout<<numm;
    return 0;
}

by Lolierl @ 2017-10-14 07:34:25

思路不错


|