- 统计位数
统计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; }