- 统计位数
统计n以内的正整数一共多少位数字,不统计前导零
例如:n为13时,12345678910111213,共17位,则输出17
输入:
2 数据个数
13 数据n(1 <= n <= 10^9)
4
输出:
17
4
#include <iostream> #include<vector> #include<string> #include<cstring> #include<algorithm> using namespace std; int main(){ int T; cin>>T; while (T--) { long long ans = 0; long long n; //不用long long 会出错 cin>>n; int cache = n; int a = 1; int weishu = 1; while (cache/10 != 0) { cache /= 10; //压缩循环 ans += a * 9 * weishu; a *= 10; weishu ++; } ans += (n - a +1 ) * weishu; printf("%lld\n", ans); } return 0; }
数据小的情况下可以把输入的数据当做字符,直接统计字符串长度
#include <iostream>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
int len;
cin>>n;
while(n)
{
cin>>m;
string s;
for(int i=1;i<=m;i++)
{
s=s+to_string(i);
}
len=s.length();
cout<<len<<endl;
n--;
}
system("pause");
return 0;
}
- 经典的gcd(最大公约数)
给你A数组,询问,1 <= i <= n , 1 <= j<= m
其中, ,输入四个整数,N(数组长度),n, m ,p 数量级为10^5
输入:
样例1:10 1 2 10
样例2:10 2 2 10
输出
20
33
样例2 解释:数组A:10 3 6 9 2 5 8 1 4 7A[gcd(1,1)]+A[gcd[1,2]]+Agcd[2,1]+A[gcd[2,2]] = A[1]+A[1]+A[1]+A[2]=33
#include<cstdio> int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int main(){ int N, n, m, p; while (scanf("%d%d%d%d", &N, &n, &m, &p) == 4) { int a[N+1]; a[1] = p; for (int i=2; i<=N; i++) a[i] = (a[i-1] + 153) % p; long long ans = 0; for (int i=1; i<=n; i++) { for (int j=1; j<=m; j++) { ans += a[ gcd(i, j) ]; } } printf("%lld", ans); } return 0; }