题解 P1619 【解一元二次方程的烦恼】

· · 题解

点我看题

思路:显然是模拟题,没什么好说的。

方法(以读入一组数据为例):

细节:

代码:

#include<bits/stdc++.h>
#define long long LL//个人习惯 
using namespace std;
char a[1005];//a是要输入的字符串 
LL n;//n是从输入的字符串找出的数字  
LL check(LL x)//check函数是用于判断数字情况的(1代表太大,2是质数,3是合数,4代表太小) 
{
    if(x>40000000)return 1;//太大了(大于40000000) 
    if(x<2)return 4;//太小了(小于2) 
    for(LL i=2;i*i<=x;i++)//判断质数(基本功) 
    {
        if(x%i==0)//有i这个因子 
        {
            return 3;//是合数 
        }
    }
    return 2;//是质数 
}
LL c(LL x)//c函数是用于计算10^x的 
{
    LL y=1;//y是储存的结果 
    for(LL i=1;i<=x;i++)//循环x次 
    {
        y*=10;//每次乘10 
    }
    return y;//返回结果 
}
LL find(LL x)//find函数是用于从字符串中找出数字的 
{
    LL y=0,ok=0;//y是当前位数,ok是用于判断还有没有数字 
    for(LL i=x;i>=1;i--)//倒序遍历 
    {
        if(a[i]>='0'&&a[i]<='9')//是一个数字 
        {
            LL z=(a[i]-'0')*c(y);//z是把当前这一位转成数字后的结果 
            n+=z;//加上当前这一位 
            y++;//位数+1 
            ok=1;//有数字 
        }
    }
    if(ok)return 1;//有数字,返回1 
    else return 0;//没有数字,返回0  
}
int main()
{
    while(gets(a+1))//用gets可以读入一行 
    {
        cout<<"Enter the number=\n";//题目要求 
        LL l=strlen(a+1);//l是字符串长度 
        n=0;//n初始化 
        if(find(l))//如果找得到数字 
        {
            LL p=check(n);//p是储存n的范围的 
            if(p==1)cout<<"Prime? No!\nThe number is too large!\n\n";//数字太大 
            else if(p==2)cout<<"Prime? Yes!\n\n";//是质数 
            else if(p==3)//是合数 
            {
                cout<<"Prime? No!\n"<<n<<"=";//不是质数 
                for(LL i=2;i*i<=n;i++)//分解质因数(基本功) 
                {
                    LL t=ok=0;//t是i这个因子的次数,ok是是否有这个因子 
                    while(n%i==0)//如果还有i这个因子 
                    {
                        ok=1;//有i这个因子  
                        n/=i;//除去i 
                        t++;//次数+1 
                    }
                    if(ok==1)//如果有这个因子 
                    {
                        if(n>1)cout<<i<<"^"<<t<<"*";//不是最后一个因子 
                        else cout<<i<<"^"<<t;//是最后一个因子 
                    }
                }
                if(n>1)cout<<n<<"^"<<1;//如果n还不等于0,那就还有一个因子,就是此时的它本身 
                cout<<"\n\n";
            }   
            else cout<<"Prime? No!\n\n";//数字太小  
        }
        else return 0;//如果找不到数字了,就结束程序 
    }
    return 0;
}

修改记录: