把小节转时间的程序
#include <iostream> #include <iomanip> #include <cmath> // 计算总时长并格式化为MM:SS std::string calculateMusicTime(int bars, double bpm, int numerator, int denominator) { // 计算总拍数 = 小节数 * 每小节的拍数 double totalBeats = bars * numerator; // 计算总秒数 = 总拍数 * (60秒 / BPM) double totalSeconds = totalBeats * (60.0 / bpm); // 分解为分钟和秒 int minutes = static_cast<int>(totalSeconds / 60); int seconds = static_cast<int>(std::round(totalSeconds - minutes * 60)); // 处理秒数进位(如62秒转为1分02秒) if (seconds >= 60) { minutes += seconds / 60; seconds %= 60; } // 格式化输出为MM:SS(补零) std::ostringstream oss; oss << std::setw(2) << std::setfill('0') << minutes << ":" << std::setw(2) << std::setfill('0') << seconds; return oss.str(); } int main() { int bars, numerator, denominator; double bpm; std::cout << "输入小节数量: "; std::cin >> bars; std::cout << "输入BPM值: "; std::cin >> bpm; std::cout << "输入拍号分子(如4/4拍输入4): "; std::cin >> numerator; std::cout << "输入拍号分母(如4/4拍输入4): "; std::cin >> denominator; std::string duration = calculateMusicTime(bars, bpm, numerator, denominator); std::cout << "总时长: " << duration << std::endl; return 0; }
nim版
import strformat import math import strutils proc calculateMusicTime(bars: int,bpm: float,numerator: int, denominator: int): string = # 计算总拍数 = 小节数 * 每小节的拍数 let totalBeats: int = bars * numerator # 计算总秒数 = 总拍数 * (60秒 / BPM) var totalSeconds: float = float(totalBeats) * 60.0 / bpm # 分解为分钟和秒 var minutes = (totalSeconds.int) / 60 var seconds = math.round(totalSeconds - float(minutes) * 60).int # 处理秒数进位(如62秒转为1分02秒) if seconds >= 60: minutes += float(seconds div 60) seconds = seconds mod 60 # 格式化输出为MM:SS(补零) var a = "minutes: " & $minutes & " seconds: " & $seconds return a echo "请输入小节" var bars = stdin.readLine() echo "请输入BPM" var bpm = stdin.readLine() echo "请输入拍号分子" var numerator = stdin.readLine() echo "请输入拍号分母" var denominator = stdin.readLine() echo calculateMusicTime(bars.parseInt(),bpm.parseFloat(),numerator.parseInt(),denominator.parseInt());
浙公网安备 33010602011771号