• LFYZ-OJ ID: 1010 天使的起誓


    思路

    • 理解题目后,会发现是一个高精度除低精度求余问题,非常简单。

    • 容易出错的地方是:求余结果为0的时候,此时,天使所在的盘子号码其实就是n,如果直接返回余数,得到的结果则是0。

    • 被除数的范围是2~101000,需要的存储位数为1001,加上一个长度位,需要一个最小1002的数组,否则会发生计算溢出。

    代码例程

    #include<iostream>
    #include<cstring>
    using namespace std;
    int m[1002];                            //被除数,m[0]是位数,全局数组,默认初始化为0
    int n;                                  //除数n
    void getm(){                            //读取字符串(高精度数字)并转储于m数组中
    	char t[1001];
    	scanf("%s", t);
    	m[0]=strlen(t);
    	for(int i=1; i<=m[0]; i++)
    		m[i]=t[m[0]-i]-'0';
    }
    int yushu(int A[], int B){              //求余函数,A%B
    	int i, t=0;                         //t为余数,其实为“过程中被除数”
    	for(i=A[0]; i>=1; i--){
    		t=t*10+A[i];
    		A[i]=t/B;
    		t%=B;
    	}
    	if(!t) t=B;                         //余数为0,说明天使就在B盘子
    	return t;
    }
    int main(){
    	scanf("%d", &n);
    	getm();
    	printf("%d", yushu(m, n));
    	return 0;
    }
    
  • 相关阅读:
    ymnets----框架内功能了解
    ymnets----代码生成
    关于分层架构
    SQL——抛出错误
    Jump Game
    combination sum && combination sum II
    35-Search Insert Position
    33-Search in Rotated Sorted Array
    34- Find First and Last Position of Element in Sorted Array
    机器学习实战之SVM
  • 原文地址:https://www.cnblogs.com/lfyzoi/p/6780240.html
Copyright © 2020-2023  润新知