求一批整数中出现最多的个位数字_(43)C++面试之从1到n整数中1出现的次数
生活随笔
收集整理的這篇文章主要介紹了
求一批整数中出现最多的个位数字_(43)C++面试之从1到n整数中1出现的次数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 面試題43:從1到n整數中1出現的次數
// 題目:輸入一個整數n,求從1到n這n個整數的十進制表示中1出現的次數。例如
// 輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。
#include <cstdio> #include <cstring> #include <cstdlib>int NumberOf1Between1AndN(int n) {if(n<0)return 0;//數字轉字符串char str[50];sprintf(str,"%d",n);//21345變為“21345”return NumberOf1(str); }int NumberOf1(const char* str) {if(!str||*str<'0'||*str>'9'||*str='0')return 0;//假設輸入21345int first=*str-'0';//最高位字符串轉整數 2unsigned int length =static_cast<unsigned int>(strlen(str));//5if(length==1&&first==0)//輸入為0return 0;if(length==1&&first>0)//輸入為1-9return 1;//輸入str “21345”//numFirst是數字10000--19999的第一位的數目//開頭是1, 后面四位為1-9里任意一個 供10×10×10×10,寫一個函數實現這個計算int numFirst=0;if(first>1)//2numFirst=PowerBase10(length-1);else if(first==1)//12345numFirst=atoi(str+1)+1;//atoi為char轉int, atoi(str+1)結果是2345//numOtherDigits為 1346--21345除第一位之外的數位中的數目int numOtherDigits=first*(length-1)*PowerBase10(length-1)//2*(5-1)*10*10*10//numRecursive是1---1345中的數目,遞歸實現int numRecursive=NumberOf1(str+1);//numberOf1("1345")return numFirst+numOtherDigits+numRecursive;}int PowerBase10(unsigned int n) {int result=1;for(int i=0;i<n;++i)result*=10;return result; }void Test(char* testName,int n,int expected) {if(testName==nullptr)printf("failed n");int result=NumberOf1Between1AndN(n);if(result==expected)printf("pass n");else{printf("failed n");}}void Test() {Test("Test1", 1, 1);Test("Test2", 5, 1);Test("Test3", 10, 2);Test("Test4", 55, 16);Test("Test5", 99, 20);Test("Test6", 10000, 4001);Test("Test7", 21345, 18821);Test("Test8", 0, 0); }int main() {char str[]="12345";int first=*str-'0';int num=atoi(str+1);printf("first=%d n",first);//1printf("num=%d n",num);//2345Test();return 0; } int NumberOf1Between1AndN(unsigned int n) {int number = 0;for(unsigned int i = 1; i <= n; ++ i)number += NumberOf1(i);return number; }int NumberOf1(unsigned int n) {int number = 0;while(n){if(n % 10 == 1)number ++;n = n / 10;}return number; }總結
以上是生活随笔為你收集整理的求一批整数中出现最多的个位数字_(43)C++面试之从1到n整数中1出现的次数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 场内场外交易成本_选择场内基金还是场外基
- 下一篇: var lib mysql ib_MYS