題意:牛牛選擇了乙個正整數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的最後一位數字。但每個人都懶得去解決這個問題,所以他們匯你是明智的。輸入 有多...