牛客網上的最後一位

2022-05-18 01:31:06 字數 1366 閱讀 8448

題意:牛牛選擇了乙個正整數x,然後把它寫在黑板上。然後每一天他會擦掉當前數字的最後一位,直到他擦掉所有數字。 在整個過程中,牛牛會把所有在黑板上出現過的數字記錄下來,然後求出他們的總和sum.

例如x = 509, 在黑板上出現過的數字依次是509, 50, 5, 他們的和就是564.

牛牛現在給出乙個sum,牛牛想讓你求出乙個正整數x經過上述過程的結果是sum.

思路:我們要找到乙個數x,經過一系列擦掉最後一位操作後,和為564。

首先要確定x的位數,它一定是三位或兩位(如果是四位,結果肯定是四位)。在此我們就假定它是三位數abc(就算最終結果是兩位數,那麼求出來a=0就可以了)。經過一系列擦操作之後:abc + ab + a = 564,

即:(a * 100 + b * 10 + c) + (a * 10 + b) + (a) =564;

即 :111 * a + 11 * b + 1 * c = 564

我們想要求a、b、c,很簡單,a = 564 // 111 = 5("//"表示取整操作)

此時564 - 111 * 5 = 9。接下來要求b:b = 9//11 = 0

此時 9 - 0 * 11 = 9。接下來要求c:c = 9//1 = 9

最終結果5->0->9

擴充套件到四位數x,它的形式一定是1111 * a + 111 * b + 11 * c + 1* d = x

同理擴充套件到n位數。

#include #include 

#include

#include

/*用例:

837592744927492746

對應輸出應該為:

-1你的輸出為:

753833470434743470

*/using

namespace

std;

long

long give(long

long

len);

intmain()

//當i=12時發生錯誤

//long long t=num_sum;

cout0;//

為甚麼轉化出來的整數是錯的

//sum_size=sum.size();

for(long

long i=sum.size();i>=1;i--)

cout

<'\n'

;

for(int i=0;i)

}for(int i=0;i)

}long

long give(long

long len)//

提供len位1

return

sum;}//

837592744927492746

牛客網上的ST階躍表

給你乙個長為n的序列a和乙個常數k 有m次詢問,每次查詢乙個區間 l,r 內所有數最少分成多少個連續段,使得每段的和都 k 如果這一次查詢無解,輸出 chtholly 第一行三個數n,m,k 第二行n個數表示這個序列a 之後m行,每行給出兩個數l r表示一次詢問輸出m行,每行乙個整數,表示答案示例1...

計算n!的最後一位非0的數

includeint main if sum 100 這裡若設定太小,當階乘很大時,會出現錯誤 printf d d n i,sum 該處為測試所用 printf d sum 10 return 0 這裡需要說明的是,當if sum 100 判斷條件不夠大時,比如只有sum 10,那麼每次只保留階乘...

杭電1097 a b週期最後一位

艱難的難題 問題描述 lcy給難題很難feng5166,庫工作小組將會忠實地jgshining和伊格內修斯 把a和b,如何知道 b。每個人都反對這個bt的問題,所以lcy問題比開始更容易。這個謎題描述 a和b,如何知道 b的最後一位數字。但每個人都懶得去解決這個問題,所以他們匯你是明智的。輸入 有多...