從1到n整數中1出現的次數 有疑問

2021-07-05 12:08:30 字數 1352 閱讀 8132

題目:輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12, 1一共出現了5次。

方法1:累加1到n中每個整數1出現的次數。每次通過對10求餘數判斷整數的個位數字是不是1。如果這個數字大於10,除以10之後再判斷個位數字是不是1。

int numberof1between1andn(unsigned

int n)

return number;

}int numberof1(unsigned

int n)

n = n / 10;

}return number;

}

方法2:以21345為例。

從1~1345可以遞迴求得。

int numberof1between1andn(int n)

char strn[50];

sprintf(strn, "%d", n);

return numberof1(strn);

}int numberof1(const

char* strn)

int first = *strn - '0';

unsigned

int length = static_cast

int>(strlen(strn));

if (length == 1 && first == 0)

if (length == 1 && first > 0)

//假設strn是「21345」

//numfirstdigit是數字10000~19999的第一位中的數目

int numfirstdigit = 0;

if (first > 1)

else

if (first == 1)

//numotherdigits是1346~21345除了第一位之外的數字中的數目

int numotherdigits = first * (length - 1) * powerbase10(length - 2);

//numrecursive是1~1345中的數目

int numrecursive = numberof1(strn + 1);

return numfirstdigit + numotherdigits + numrecursive;

}int powerbase10(unsigned

int n)

return result;

}

測試用例

整數中1出現的次數(從1到n整數中1出現的次數)

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。include u...

整數中1出現的次數(從1到n整數中1出現的次數)

時間限制 1秒 空間限制 32768k 題目描述 include using namespace std class solution 求之前的length 1位中含乙個數 int base1 0 int base2 1 for int i 0 i1 i cout cout cout 求從base2...

整數中1出現的次數(從1到n整數中1出現的次數)

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。演算法一 暴力累加...