timus 1104. Don’t Ask Woman about Her Age URAL 解题报告

本文介绍了一道关于寻找特定进制的算法题,通过分析输入数字的不同进制表示,找到能在2到36进制间使数值被(k-1)整除的最小进制。文章提供了完整的解题思路及C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

timus     1104. Don’t Ask Woman about Her Age     URAL  解题报告


给一个数,但是不知道进制,然后找一个进制在2--36中,使其符合能整出(k-1),而且尽可能的小!

这种题不难就是进制转化,按照一般的朴素的方法写就行了,但是注意,如果输入的是0,那么只能输出进制是2,不能是1,因为要我们在2--36中寻找嘛!

还有注意取余时的一些操作!
a*b%mod==a%mod*(b%mod)%mod ,一定不要忘了1
(a+b%mod)%mod=(a+b)%mod

另外,注意此题最多多少位!
还有就是每一位上的数的权值不同啊!

代码:

#include <iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#include<cctype>
using namespace std;
int n,i,j,le1,le2;
string  a;
long long sum,max1=0;
long long  b[1000009];
void  init()
{
    cin>>a;
    getchar();
    n=a.length();
    for(i=0; i<n; i++)
    {
        if(isupper(a[i]))
            b[i]=a[i]-'A'+10;
        else
            b[i]=a[i]-'0';
        if(b[i]>max1)
            max1=b[i];
    }

}
void  solve()
{
    int gs=0;
    if(max1+1>36)
    {
        cout<<"No solution."<<endl;
        return;
    }
     if(max1<=1)
    {///这里注意如果读入的是一个0,只能写成他符合2进制,而不写1,因为题目让我们在2--36中寻找!
        cout<<2<<endl;
        return;
    }

    for(int k=max1+1; k<=36; k++)
    {
        int mod=(k-1);
        sum=b[0]%mod;///注意这里没有放到for里面,如果忘了取模而恰巧该数就1位的话就惨了……
        int tmp=k;
        for(int t=1; t<n; t++)
         {
              sum+=(b[t]%mod*(tmp%mod) )%mod;
              sum%=mod;
              tmp=tmp*tmp%mod;
         }
        if(sum==0)
        {
            gs=1;
            cout<<k<<endl;
            break;
        }

    }
    if(gs==0)
        cout<<"No solution."<<endl;

}
int main()
{
    init();
    solve();
    return 0;
}

timus     1104. Don’t Ask Woman about Her Age     URAL  解题报告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值