Почему он показывает исключение с плавающей запятой (SIGFPE).
Задача состоит в том, чтобы вычислить комбинации(nCr). пользователь должен ввести нет тестовых случаев , число n и число r.
Ввод:
Первая строка содержит количество тестов тестов т. Т следовать. Каждый тестовый набор содержит 1 строку входных данных, содержащую 2 целых числа n и r, разделенных пробелом.
Выход:
Для каждого тестового случая в новой строке найдите nCr. Модуль вывода на 109+7.
Ограничения:
1 <= T <= 50
1<= n <= 103
1<= r <=800 ...
Что я уже пробовал:
#include <bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n,r; cin>>n>>r; if(r>n) cout<<"0"<<endl; else if(r==1) cout<<n<<endl; else if(r==n) cout<<"1"<<endl; else if(n-r==1) cout<<n<<endl; else { int i,j; long int res; long int num=n; for(i=n-1;i>=(n-r+1);i--) num*=i; long int ch=(pow(10,9)+7); long int den=r; for(i=r-1;i>=2;i--) den*=i; if((num/den)<ch) res=(num/den); else if ((num/den)==ch) res=0; else res=((num/den)%ch); cout<<res<<endl; } } return 0; }
Rick York
Одна вещь, которая может очень помочь читабельности кода, - это правильно отступить ваш код. Тогда вы сможете лучше видеть иерархию и протяженность циклов. В вашем коде трудно понять, где вы подразумеваете расширение циклов for. Точно так же, как ifs и elses, цикл for расширяется для одного оператора, если только он не имеет фигурных скобок. Мне кажется, что ваши петли for нуждаются в некоторых скобках. Это хорошая привычка всегда добавлять их, потому что тогда вам будет легче добавлять операторы в цикл.