关闭

一些散乱的算法竞赛入门经典的知识点(一)

标签: 刘汝佳算法竞赛入门算法
523人阅读 评论(2) 收藏 举报
分类:

1e-6:1*10^-6;
3e-6 : 3*10^-6;
(e)代表这个科学计数法……
在用: scanf(“”,&)!=EOF时,可以用enter+CTRL+enter来结束输入。
for(double i=0;i!=10;i+=0.1)printf(“%.1f\n”,i);
这个由于精度的问题会死循环的。
它是永远都得不到整的10的。
另外如果用printf保留c位的话:

void q(){
double a,b;
scanf("%lf%lf",&a,&b);
int c;
scanf("%d",&c);
printf("%.*lf",c,a/b);
}

这样就是正确的了。
对于一个输出100位精度的数:

#include <iostream>
#include <ctime>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iomanip>
#include <stack>
using namespace std;
int main (){
    int a,b,c;
    int q;
    bool d=0;
    cin>>a>>b>>c;
    cout<<a/b<<".";
    a%=b;
    for(int i=1;i<=c;i++){
        bool d1=1;
        a%=b;
        if(a&&!d&&i!=c){
            a*=10;
            cout<<a/b;
        }
        else if(!d&&!a){
            cout<<a/b;
            d=1;
            d1=0;
        }
        else if(i==c&&!d){
            a*=10;
            if(a){
                int q,w;
                q=a%b*10;
                if(q/b>5)cout<<(a/b+1);
                else cout<<a/b;
            }
            else cout<<a/b;
        }
        if(d&&d1)cout<<0;
        if(!d1)d1=1;
    }
    return 0;
}

这个真的不简单啊……
还有就是如果想从int a[1005],b[1005]复制一下前k个把a复制到b:
memcpy(b,a,sizeof(int)*k);
浮点类型:memcpy(b,a,sizeof(double)*k);
可以先这样……

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:44163次
    • 积分:1690
    • 等级:
    • 排名:千里之外
    • 原创:128篇
    • 转载:3篇
    • 译文:0篇
    • 评论:41条
    单向膜拜