1074. 第一位数字

10175102262 LarsPendragon

不会的还是要努力学啊。这道题大数运算什么的就不要想(轻易)过了,要动脑子的(虽然我没脑子上网学的)。
n^n=10^(x)×a,a的整数部分就是首位数字。则两边同时取10的对数,nlgn=x+lga,剩下的就是算了。
附C代码:

#include <stdio.h>
#include <math.h>
int main()
{
    int n;
    scanf("%d",&n);
    while(n)
    {
        double a, x;
        a=n*log10(n);
        a-=(int)a;
        x=pow(10, a);
        printf("%d\n",(int)x);
        scanf("%d",&n);
    }
    return 0;
}
10175102211

%成耀dalao

10175101245

受科学计数法的启发:
n^n = t×10^a,a为整数,t∈(0,10)
则要输出的其实是[t],[x]为高斯函数
然后取对数,得到nlgn = lgt + a
lgt取值范围为(0,1)
于是a = [nlgn]
t = 10^(nlgn - a) = 10^(nlgn - [nlgn])
输出的就是[10^(nlgn - [nlgn])]
大概也可以这样表示:[10^{nlgn}],{x}为x的小数部分

10165101226

生无可恋
[em:15]
一起转专业吧大兄弟

13627999316
import math
while True:
    n = int(input())
    if(n == 0):
        break
    cha = n*math.log10(n) - int(n*math.log10(n))
    t = pow(10,cha)
    print(int(t))
10175101249

天啦噜居然有一千多组数据,记得开大一点

Twisted9

include

include

using namespace std;

int main()
{
int n;
double a,b,c;

while(cin >> n && n != 0)
{
    a = n*log10(n);
    b = modf(a,&c); // modf函数可以分离小数
    b = modf(pow((double)10,b),&c);
    cout << c << endl;
}

}

Master X

两边取对数解,具体看楼下就行。
想大数运算的……服你

10165102222

超时了,求好算法

include

include

int del(inta,int n,intlen)
{
int j,k=0,b[500];
for(j=0;j<
len;j++)
{b[j]=a[j];
a[j]=(a[j]n+k)%10;
k=(a[j]
n+k)/10;
}
if(k!=0)a[j++]=k;
*len=j;
return a;
}
void solve(unsigned int n)
{
int len=1,i,a[500];
a[0]=n;
for(i=2;i<=n;i++)
del(a,n,&len);
printf(“%d”,a[len-1]);
}
int main()
{
unsigned int n;
while(1)
{
scanf(“%u”,&n);
if(n==0)break;
else if(n==1)printf(“1\n”);
else solve(n);
}
return 0;
}

ZiLLAXP

生无可恋
生无可恋[em:07]
超时。。。

Fifnmar

嵌套一下:

#include <cmath>
#include <iostream>
int main() {
    for (int n; std::cin >> n, n;) {
        double helper;
        std::cout << (int)floor(pow(10, modf(n * log10(n), &helper))) << '\n';
    }
}
告白于荆州

使用Python大多数会想到math.log10,但是估计没有多少人会用上math.modf,这是一个能够返回给定数字的整数部分和小数部分的函数,输出直接一套带走

改个名字吧

稍微优化了10175102262 LarsPendragon的代码
仅供参考

include

include

include

using namespace std;
int main()
{
int n;
while(scanf(“%d”,&n)==1&&n)
{
double tem=n*log10(n);
tem-=(int)tem;
int ans=pow(10,tem);
cout<<ans<<endl;
}
}

10152130206

该怎么解?
[em:01]啧啧啧

你当前正在回复 博客/题目
存在问题!