CF 1107B(数论,规律)

B. 数字根
每次测试的时间限制1秒
每次测试的内存限制256 兆字节
输入标准输入
输出标准输出
今天在数学课上,Petya 学习了数字根。

非负整数的数字根是通过对数字求和的迭代过程获得的单个数字值,每次迭代都使用前一次迭代的结果来计算数字和。该过程继续,直到达到一位数。

让我们表示的数字根 X 作为 秒( x ). 然后秒( 5 ) = 5, 秒( 38 ) = S( 3 + 8 = 11 ) = S( 1 + 1 = 2 ) = 2, 秒( 10 ) = S( 1 + 0 = 1 ) = 1.

佩佳得到的作业是 n 任务形式:查找 克- 第一个数字根为的正数 X.

彼佳已经把所有的问题都解决了,只是不知道对不对。你的任务是解决所有n Petya 作业中的任务。

输入
第一行包含一个整数 n (1 ≤ n ≤103) — Petya 作业中的任务数。下一个n 行包含两个整数 克一世 (1 ≤克一世≤1012) 和 X一世 (1 ≤X一世≤ 9)— 一世-th Petya 的任务,您需要在其中找到一个 克一世-th 正数,其数字根是 X一世.

输出
输出 n 线条, 一世-th 行应该包含一个整数——答案 一世- 问题。

这道题非常有意思,每次对一个数+10-1,即可得到位数相同的数,而当个位数剪到0是继续加10-1即+9会使得又会使得之前的十位上的数字a加上9之后成为1x 其中x=a-1,而这加起来正好等于x,所以这是一个公差为9的等差数列,而x即为首项,f(x)=9(k-1)+x;这样这道题就轻松ac了,唯一让我疑惑的是这道题的数据k是1e12,多少有点迷惑人了hh*

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string.h>
#define ll long long 
using namespace std;

int main()
{
    int t;
    cin>>t;
    int x;
    ll k;
    while(t--)
    {
        cin>>k>>x;
        ll ans=(ll)(k-1)*9+x;
        cout<<ans<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值