IOS算法面试题(2)——任意阶乘的最后0的个数、超大数相加集总

来源:互联网 发布:全站仪数据采集的步骤 编辑:程序博客网 时间:2024/04/27 20:52



////  main.c//  求任意阶乘最后0的个数(正确思路)////  Created by qianfeng on 15/12/15.//  Copyright (c) 2015年 cuixuerui. All rights reserved.//#include <stdio.h>#include <math.h>/*  求任意阶的最后零的个数 */int main(int argc, const char * argv[]) {        /*     思路:1、统计5的倍数num比如5,10,15,20,25....     2、5,5*2,5*3,5*4,5*5...5*5,5*6,...,5*5*5,5*5*6,....     */    int n;    int count=0;    scanf("%d",&n);    int k;    for (int i=1; i<=n; i++) {        //对i进行因式分解,有几个5阶乘后面就有几个0        k=i;        if(k%5==0){            for (int j=1; j<=log(i)/log(5); j++) {                if (k%5==0) {                    k=k/5;                    count++;                                        }            }        }    }    printf("%d",count);    return 0;}

////  main.c//  超大数相加////  Created by qianfeng on 15/12/12.//  Copyright (c) 2015年 cuixuerui. All rights reserved.//#include <stdio.h>#include <stdlib.h>/*  在计算机领域中,经常需要做一些很大的数字处理,比如超过64位,比如128位处理。 但是计算机目前32位系统最多处理2^32这样的32位的数字,但是对于大型数字无法处理.  如: 3032832398719038781904783904783294873248783493194394132041834 + 323819473948324891247129084723412348713403284 = 3032832398719039105724257853108186120377868216606742845445118  请设计一个程序,可以处理超大长度(长度最大1024位,相信即使世界毁灭也不会有这么大的数字)的数字相加. */int main(int argc, const char * argv[]) {    // insert code here...    char ch1[1024];    char ch2[1024];    //1、将ch1,ch2初始化为0    for(int i=0;i<=1024;i++)    {        ch1[i]='0';        ch2[i]='0';    }    int length1=0,length2=0;    printf("请输入第一个数:\n");    //2、获取第一个数    while (length1<=1024) {        scanf("%c",&ch1[length1]);        if (ch1[length1]=='\n'||ch1[length1]==' ') {            fpurge(stdin);            break;        }        length1++;    }    //3、获取第二个数    printf("请输入第二个数:\n");    while (length2<=1024) {        scanf("%c",&ch2[length2]);        if (ch2[length2]=='\n'||ch2[length2]==' ') {            fpurge(stdin);            break;        }        length2++;    }    //4、将ch1、ch2倒叙转化为整型数据,存储到num1、num2中    int num1[1024]={0};    int num2[1024]={0};    int length=length1>length2?length1:length2;    for (int i=0; i<length1; i++) {        num1[i]=ch1[length1-i-1]-'0';    }    for (int i=0; i<length2; i++) {        num2[i]=ch2[length2-i-1]-'0';    }    int sum[1025]={0};//初始化一个数组来盛放两数相加的和    int add=0;    for (int i=0; i<=length; i++) {        sum[i]=num1[i]+num2[i]+add;        add=0;        if (sum[i]>9) {            add=1;            sum[i]=sum[i]-10;        }    }    int k;    if (sum[length]==0) {        length=length-1;    }    for(k=length;k>=0;k--)    {        printf("%d",sum[k]);        }    return 0;}


1 0
原创粉丝点击