加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数相加,大数相乘和100!

发布时间:2021-03-06 08:46:59 所属栏目:大数据 来源:网络整理
导读:???????????? 自从腾讯HR口试被刷后,也就不想找演习了,记着教导吧,没事尚有九月份,此刻和其他人几小我私人都加进去了linux3+1尝试室,暑假好好干一个暑假。 ??? 大数相加固然之前写过,可是此刻写代码最少也应该有本身的气魄威风凛凛和类型了,着实大数相加和大数相
副问题[/!--empirenews.page--]

???????????? 自从腾讯HR口试被刷后,也就不想找演习了,记着教导吧,没事尚有九月份,此刻和其他人几小我私人都加进去了linux3+1尝试室,暑假好好干一个暑假。

??? 大数相加固然之前写过,可是此刻写代码最少也应该有本身的气魄威风凛凛和类型了,着实大数相加和大数相乘的思绪很简朴,int我们此刻一样平常用的都是4个字节,最大也是2147483647,简朴说21亿,可是更大的数字就从不下了,由于我们可以用数组来模仿大数相乘和大数相加。我们将每一位数字存在数组中,对付每一次处理赏罚,通过/10(除10)看进位是几,通过%10(取余)看该位保存几,也就是数组的每一次最后都是小于10的,

大数相乘的代码

????

#include <stdio.h>
#include <string.h>


#define MAXLEN  500


int  flag = 0;     //符号数组应该从那边开始计较
int  a[MAXLEN];  
int  b[MAXLEN];
int  c[2*MAXLEN];  //将每一位的计较功效都生涯在内里

// 翻转过来甜头理赏罚
void reverse_str(char *str,int *array,int len)
{
      int i = 0;

      for(i = 0; i < len; i++){
            array[len - i - 1] = str[i] - '0'; //刚开始健忘'0'
      }//end for

}

void multiply(int *a,int *b,int *c,int sa_len,int sb_len)
{ 
    int  i = 0;
    int  j = 0;
    int  sum_len = sa_len + sb_len - 1;

    for(i = 0; i < sa_len; i++){
        for(j = 0; j < sb_len; j++){
            c[i + j] += a[i] * b[j];
            printf("c[%d]= %d ",i+j,c[i+j]);
        }//end for 2
        printf("n");
    }//end for 1
     
    for(i = 0; i < sum_len - 1; i++){
        c[i+1] += c[i] / 10;
        c[i]   %= 10;
    }//end for
    
    if(c[i] != 0){
        flag = i;
    }else{
        flag = i - 1;
    }//end if else
}

void print_c_array(int *c,int sb_len)
{
    int i = 0;
    int sum_len = sa_len + sb_len;

    for(i = flag; i >= 0; i--){
        printf("%d",c[i]);
    }//end for
    printf("n");
}

int main(int argc,char *argv[])
{
    char  sa[MAXLEN];
    char  sb[MAXLEN];
    int sa_len = 0;
    int sb_len = 0;

    memset(sa,0x00,sizeof(sa));
    memset(sb,sizeof(sb));

    gets(sa);
    gets(sb);

    sa_len = strlen(sa);
    sb_len = strlen(sb);

    printf("%s %dn",sa,sa_len);
    printf("%s %dn",sb,sb_len);

    reverse_str(sa,a,sa_len);
    reverse_str(sb,b,sb_len);

    multiply(a,c,sa_len,sb_len);

    print_c_array(c,sb_len);

    return 0;
}

大数相加,大数相乘和100!


大数相加的代码也相同


#include <stdio.h>
#include <string.h>


#define MAXLEN  100


int  flag;     //符号数组应该从那边开始计较
int  a[MAXLEN];  
int  b[MAXLEN];
int  c[MAXLEN+1];  //将每一位的计较功效都生涯在内里

// 翻转过来甜头理赏罚
void reverse_str(char *str,int len)
{
      int i = 0;
      int j = MAXLEN - 1;

      // 1 2 3 4 5 6
      //       4 5 6
      for(i = len - 1; i >= 0; i--){
            array[j--] = str[i] - '0';
      }//end for

}

void large_number_add(int *a,int sb_len)
{ 
    int  i = 0;
    int  j = MAXLEN - 1;
    int  m = sa_len>sb_len?sa_len:sb_len;

    for(i = 0; i < m; i++,j--){
          c[j] += a[j] + b[j];
          if(c[j] >= 10){
			  c[j-1]  += c[j] / 10;
              c[j] = c[j] % 10;         
          }
		  printf("c[%d]=%d,c[%d]=%dn",j,c[j],j-1,c[j-1]);
    }
    if(c[j] != 0){
        flag = j;
    }else{
        flag = j + 1;
    }

}

void print_c_array(int *c,int sb_len)
{
    int i = 0;
    int sum_len = sa_len + sb_len;

    for(i = flag; i < MAXLEN; i++){
        printf("%d",sb_len);

    large_number_add(a,sb_len);

    return 0;
}


???

大数相加,大数相乘和100!


100的阶乘也就是这思绪,大数都是这样处理赏罚的,既然直接存取不了,窝一位一位处理赏罚

#include <stdio.h>
#include <string.h>

#define MAXLEN  500
int a[MAXLEN];


void factorial(int *a,int n,int *start)
{
	int i = 0;
	int j = 0;
    int temp = 0;
	int carry_bit = 0;
	int k = MAXLEN - 2;
    int factorial_num = 2;

    a[MAXLEN - 1] = 1;

	for(i = 1; i < n; i++){
		for(j = MAXLEN - 1; j > k;j--){
		     temp = a[j] * factorial_num + carry_bit;
			 a[j] = temp % 10;
			 carry_bit = temp /10;
		}//end for

		while(carry_bit){
		     a[k--] += carry_bit % 10;
			 carry_bit /= 10;
		}//end for

		factorial_num++;
	}//end for
	
	*start = k;

}

void print_array(int *a,int start)
{
     int i = 0;

	 for(i = start + 1; i < MAXLEN; i++){
	     printf("%d",a[i]);
	 }//end for

	 printf("n");
}


int main(int argc,char *argv[])
{
    int n = 0;
	int start = 0;

	scanf("%d",&n);

	factorial(a,n,&start);

    print_array(a,start);

	return 0;
}

下面这个是一个数的阶乘有几多个0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读